[Linux-programlama] Re: MySQL IF() performans problemi

---------

[Linux-programlama] Re: MySQL IF() performans problemi

From: Ismail ASCI <ismail.asci_at_gmail.com>
Date: Fri, 6 Mar 2009 14:45:11 +0200
Message-ID: <28814fb60903060445vd6aac97ldee56f5c19f145b3@mail.gmail.com>

Merhabalar,
IN ile yaptiginiz sorgular verdiginiz parametrelere gore sirali gelmezler.
Sirali gelmesi icin "union select" yapabilirsiniz.

union (select ... where id=34 order by x)
union (select ... where id<>34 order by x)

gibi... "esit degil" index kullanimi acisindan biraz can sıkıcı olsa da
oncekine gore daha iyi performans alabilirsiniz muhtemelen.

ya da 3. bir order field'i acip bunlara istediginiz degerleri verip bu
field'a gore siralayabilirsiniz.

2009/3/5 OKAN <liste_at_ari-tech.com>

> Haklısınız, IF()'lere ihtiyac yokmuş, ben ORDER BY deger=2 şeklinde doğru
> sonuc verdigini fark etmemişim, çalıpyır bu şekilde.
> Ancak ne yazık ki performansa olumlu yonde neredeyse hic katkısı olmadı.
> Aynen 1sn'yeye yakın suruyor boyle bir sorgunun yanıtlanması.
>
> Index'leri kontrol ettim, EXPLAIN cıktılarına bakıyorum ama ne yazık ki bir
> sonuca ulasamadım.
>
> Baska yontemlere de acık durumdayım aslında, asıl amacım, su ki.
> Sehri İstanbul, ilçesi Kadıköy, semti Göztepe olan kayıtları önce almak
> istiyorum, sonra diger kalanlara ihtiyacım var. Bu konuda farklı yaklasımlar
> da onerirseniz denemek isterim.
> Tabi ilk tercihim SQL ile bu sorunu cozebilmek.
> Saygılarımla
>
> ----- Original Message -----
> *From:* Elvin Åžiriyev <elvin_at_siriyev.net>
> *To:* Özgür yazılımlarla çeşitli dillerde yazılım geliştirme<linux-programlama_at_liste.linux.org.tr>
> *Sent:* Thursday, March 05, 2009 2:04 PM
> *Subject:* [Linux-programlama] Re: MySQL IF() performans problemi
>
> sorgu böyle hızlanabilir ama ne kadar emin değilim:
>
> SELECT
> tablo1.id AS id,
> sehir,
> il,
> ilce,
> semt
> FROM tablo1, tablo2
> WHERE tablo1.grup='1' AND
> tablo1.durum='1' AND
> tablo1.islem_id=tablo2.id AND
> tablo2.durum='1'
> ORDER BY sehir=34 DESC, ilce=1111 DESC, semt=9999 DESC
>
>
> NOT: daha önce gönderdiğim sorgu çalışmıştır, şöyleki deger=2 durumu en
> sona bırakmıştır.
> ORDER BY deger=2 DESC yazarsanız 2yi en sona değil en başa
> getirebilirsiniz.
>
> 2009/3/5 OKAN <liste_at_ari-tech.com>
>
>> Ne yazık ki "ORDER BY deger=2" gibi bir SQL cümlecigi bir islem
>> yapmıyor. SQL sorunsuz calisiyor ama "ORDER BY deger" ile aynı sonucları
>> üretiyor.
>>
>> Orijinal SQL Ornegi:
>>
>> SELECT tablo1.id AS id, sehir, il, ilce, semt,
>> IF(sehir=34, '1', '0') AS s_sehir,
>> IF(ilce=1111, '1', '0') AS s_ilce,
>> IF(semt=9999, '1', '0') AS s_semt
>> FROM tablo1, tablo2 WHERE tablo1.grup='1' AND tablo1.durum='1' AND
>> tablo1.islem_id=tablo2.id AND tablo2.durum='1' ORDER BY s_sehir DESC,
>> s_ilce DESC, s_semt DESC
>>
>> Saygılar
>>
>>
>> ----- Original Message -----
>> *From:* Elvin Åžiriyev <elvin_at_siriyev.net>
>> *To:* Özgür yazılımlarla çeşitli dillerde yazılım geliştirme<linux-programlama_at_liste.linux.org.tr>
>> *Sent:* Thursday, March 05, 2009 1:38 PM
>> *Subject:* [Linux-programlama] Re: MySQL IF() performans problemi
>>
>> SELECT isim, deger, IF (deger=2, "1", "0") AS siralama FROM tablo ORDER BY
>>
>> siralama DESC
>>
>> sorgusunu bir de
>>
>> SELECT isim, deger FROM tablo ORDER BY deger=2
>>
>> olarak deneyin. uygulamadaki sorguyu gönderirseniz belki önemli
>> düzenlemeler yapılabilr.
>>
>> 2009/3/5 OKAN <liste_at_ari-tech.com>
>>
>>> Merhabalar, Mysql uzerinde belli alanlar eger istedigim degerde ise
>>> once almak icin asagidaki gibi IF deyimli bir sorgu kullanıyorum.
>>>
>>> SELECT isim, deger, IF (deger=2, "1", "0") AS siralama FROM tablo ORDER
>>> BY
>>> siralama DESC
>>>
>>> Yani deger='2' olan satırları başa alıyorum. Gercek uygulamada bu IF
>>> degimlerinden 6 adet kullandım ve istedigim veriye ulaşabiliyorum.
>>>
>>> Ancak ne yazık ki, bu Mysql için çok pahalı bir yontem, Mysql performansı
>>> boyle bir sorguda cok kotu bir durum alıyor. (1 sorgu yaklaşık 1sn suruyor
>>> ve mysql anında yavaşlıyor)
>>>
>>> Amacım, belirledigim 6 alanda eger istedigim kayıtlar varsa onları on
>>> plana almak. Bunu performans sorununu aşarak nasıl başarabilirim?
>>>
>>> Şimdiden ilgilenen arkadaşlara teşekkür ederim.
>>>
>>> OKAN ARI
>>>
>>>
>>>
>>> _______________________________________________
>>> Linux-programlama mailing list
>>> Linux-programlama_at_liste.linux.org.tr
>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>
>>>
>>
>>
>> --
>> Elvin Åžiriyev
>> http://siriyev.net
>>
>> ------------------------------
>>
>> _______________________________________________
>> Linux-programlama mailing list
>> Linux-programlama_at_liste.linux.org.tr
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
>> _______________________________________________
>> Linux-programlama mailing list
>> Linux-programlama_at_liste.linux.org.tr
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
>
>
> --
> Elvin Åžiriyev
> http://siriyev.net
>
> ------------------------------
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>

-- 
Ismail ASCI

_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Fri 06 Mar 2009 - 13:30:51 EET

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.