Discussion:
[Linux-programlama] Re: SQL'de OR kullanýmý ve performans
Uygar UZUNHASAN
2007-12-29 15:52:41 UTC
Permalink
SELECT * FROM
tablo WHERE x='1'
UNION
SELECT * FROM
tablo WHERE y='1'

Uygar UZUNHASAN
uygaruzunhasan at yahoo.com

----- Original Message ----
From: OKAN ARI <liste at ari-tech.com>
To: linux-programlama at liste.linux.org.tr
Sent: Saturday, December 29, 2007 5:08:05 PM
Subject: SQL'de OR kullanÜmÜ ve performans





DIV {
MARGIN:0px;}



Ornegin 10.000 kayÅ­tlÅ­ bir tabloda SELECT * FROM
tablo WHERE x='1' OR y='1'



die bi sorgumuz olsun.



Biliyoruz ki aslÅ­nda x='1' olan 14, y='1' olan 10
kayÅ­t var.



Bu sorgunun yanÅ­tÅ­ bulnurken tum 10.000 kayÅ­t tek
tek inceleniyor (EXPLAN ile gordugum). Bu da son derece ciddi br performans
dususune neden oluyor. Bu baglamda



SQL'de OR kullanmak bu kadar performans
dusuruyorsa (ki boyle bir reel tabloda sorgu 0.15sn suruyor) bunun bir cozumu
olmalÅ­ die dusunuyorum. Topamda max 24 kayÅ­t verecek bir sorgu icin 10.000
kaydÅ­n tektek incelenmeden olasulmasÅ­nn bir yolu var mdÅ­Å­r?



SaygÅ­lar



OKAN








____________________________________________________________________________________
Never miss a thing. Make Yahoo your home page.
http://www.yahoo.com/r/hs
-------------- sonraki bölüm --------------
Bir HTML eklentisi temizlendi...
URL: http://liste.linux.org.tr/pipermail/linux-programlama/attachments/20071229/36ed14e5/attachment.html
OKAN ARI
2007-12-29 16:01:18 UTC
Permalink
Tesekkurler, peki soyle bir mantık mı yurutmek lazım. OR kullanmak yerine UNİON ile tabloları birlestirmek her zaman daha iyidir? Zira bu seklde cidden sadece sql bazında cıkan ufak kayıtlar birlestirildi.

Ancak bası sırgularda 10 larca OR var. Buların her birini UNION ile birlestirmek mantıklı mıdır? Yoksa duruma gore sekilendirmek mi lazım?


----- Original Message -----
From: Uygar UZUNHASAN
To: linux-programlama at liste.linux.org.tr
Sent: Saturday, December 29, 2007 5:52 PM
Subject: [Linux-programlama] Re:SQL'de OR kullanÜmÜ ve performans


SELECT * FROM tablo WHERE x='1'
UNION
SELECT * FROM tablo WHERE y='1'


Uygar UZUNHASAN
uygaruzunhasan at yahoo.com



----- Original Message ----
From: OKAN ARI <liste at ari-tech.com>
To: linux-programlama at liste.linux.org.tr
Sent: Saturday, December 29, 2007 5:08:05 PM
Subject: SQL'de OR kullanÜmÜ ve performans


Ornegin 10.000 kayÅ­tlÅ­ bir tabloda SELECT * FROM tablo WHERE x='1' OR y='1'

die bi sorgumuz olsun.

Biliyoruz ki aslÅ­nda x='1' olan 14, y='1' olan 10 kayÅ­t var.

Bu sorgunun yanÅ­tÅ­ bulnurken tum 10.000 kayÅ­t tek tek inceleniyor (EXPLAN ile gordugum). Bu da son derece ciddi br performans dususune neden oluyor. Bu baglamda

SQL'de OR kullanmak bu kadar performans dusuruyorsa (ki boyle bir reel tabloda sorgu 0.15sn suruyor) bunun bir cozumu olmalÅ­ die dusunuyorum. Topamda max 24 kayÅ­t verecek bir sorgu icin 10.000 kaydÅ­n tektek incelenmeden olasulmasÅ­nn bir yolu var mdÅ­Å­r?

SaygÅ­lar

OKAN





------------------------------------------------------------------------------
Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now.


------------------------------------------------------------------------------


_______________________________________________
Linux-programlama mailing list
Linux-programlama at liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
-------------- sonraki bölüm --------------
Bir HTML eklentisi temizlendi...
URL: http://liste.linux.org.tr/pipermail/linux-programlama/attachments/20071229/d70cf243/attachment.html
Uygar UZUNHASAN
2007-12-29 16:41:56 UTC
Permalink
Ben bu işin uzmanı değilim (nasıl çalıştığını bilmiyorum) ama muhtemelen OR dediğinizde UNION çalışıyordur yani otomatik olarak bu şekilde arıyordur. Sonuçları ms ler bazında olan sorgularda zaten sorun değil. Size tavsiyem tabloyu şişirip ikisini de ayrı ayrı test etmeniz, (mesela öyle bi sorgu yazın ki sonuç 40-50sn sÃŒrsÃŒn) sonra da bizlerle paylaşmanız.

Uygar UZUNHASAN
uygaruzunhasan at yahoo.com

----- Original Message ----
From: OKAN ARI <liste at ari-tech.com>
To: linux-programlama at liste.linux.org.tr
Sent: Saturday, December 29, 2007 6:01:18 PM
Subject: [Linux-programlama] Re: SQL'de OR kullanÜmÜ ve performans





DIV {
MARGIN:0px;}



Tesekkurler, peki soyle bir mantık mı yurutmek
lazım. OR kullanmak yerine UNİON ile tabloları birlestirmek her zaman daha
iyidir? Zira bu seklde cidden sadece sql bazında cıkan ufak kayıtlar
birlestirildi.



Ancak bası sırgularda 10 larca OR var. Buların her
birini UNION ile birlestirmek mantıklı mıdır? Yoksa duruma gore sekilendirmek mi
lazım?






----- Original Message -----

From:
Uygar
UZUNHASAN

To: linux-programlama at liste.linux.org.tr


Sent: Saturday, December 29, 2007 5:52
PM

Subject: [Linux-programlama] Re:SQL'de OR
kullanÜmÜ ve performans




SELECT * FROM tablo WHERE x='1'
UNION
SELECT * FROM tablo WHERE y='1'


Uygar UZUNHASAN
uygaruzunhasan at yahoo.com



-----
Original Message ----
From: OKAN ARI <liste at ari-tech.com>
To: linux-programlama at liste.linux.org.tr
Sent:
Saturday, December 29, 2007 5:08:05 PM
Subject: SQL'de OR kullanÜmÜ ve
performans


DIV {
MARGIN:0px;}


Ornegin 10.000 kayÅ­tlÅ­ bir tabloda SELECT * FROM
tablo WHERE x='1' OR y='1'



die bi sorgumuz olsun.



Biliyoruz ki aslÅ­nda x='1' olan 14, y='1' olan
10 kayÅ­t var.



Bu sorgunun yanÅ­tÅ­ bulnurken tum 10.000 kayÅ­t
tek tek inceleniyor (EXPLAN ile gordugum). Bu da son derece ciddi br
performans dususune neden oluyor. Bu baglamda



SQL'de OR kullanmak bu kadar performans
dusuruyorsa (ki boyle bir reel tabloda sorgu 0.15sn suruyor) bunun bir cozumu
olmalÅ­ die dusunuyorum. Topamda max 24 kayÅ­t verecek bir sorgu icin 10.000
kaydÅ­n tektek incelenmeden olasulmasÅ­nn bir yolu var mdÅ­Å­r?



SaygÅ­lar



OKAN









Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try
it now.





_______________________________________________
Linux-programlama
mailing
list
Linux-programlama at liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama






____________________________________________________________________________________
Never miss a thing. Make Yahoo your home page.
http://www.yahoo.com/r/hs
-------------- sonraki bölüm --------------
Bir HTML eklentisi temizlendi...
URL: http://liste.linux.org.tr/pipermail/linux-programlama/attachments/20071229/2464cd70/attachment.html
OKAN ARI
2007-12-29 17:17:21 UTC
Permalink
Tabloyu sisirip testlet yapıyorum, zaten yazdıklarım da bu bilgiler ısıgında:)

Yani ozetle

SELECT * FROM tablo WHERE x='1' OR y='1' YERİNE
SELECT * FROM tablo WHERE x='1' UNION SELECT * FROM tablo WHERE y='1'

seklinde bir kullanım cok daha performanslı calisiyor. Neden derseniz.
İlk sorgu tum taboyu eksiksiz tararken 2. sorgu x'in 1 e esit oldugu kısıtlı kayıt ile ynin 1 e esit oldugu kısıtlı kayot sonuclarını birlestiriyor.

Bu durumda UNION kesinlikle daha performanslı.

PMA cıktısına gore 1. sorgu 0.15sn surerken, 2. sorgu 0.002sn suruyor.

Sorum ve sornum ise su, arama yapılan bi cok formda x=1 OR y=1 OR z=1 OR gdie gidiyor. Bu da anlıyorum ki tum tabloyu her zaman işlemeyi gerektiriyor. Bu durumdanapmak lazım? x'lerin 1 oldugu ek tablolar acmak acaba gercekten mantık lı mı?

Bu konuda hakkında her turlu yorumu merakla bekliyorum

OKAN ARI
----- Original Message -----
From: Uygar UZUNHASAN
To: linux-programlama at liste.linux.org.tr
Sent: Saturday, December 29, 2007 6:41 PM
Subject: [Linux-programlama] Re: SQL'de OR kullanÜmÜ ve performans


Ben bu işin uzmanı değilim (nasıl çalıştığını bilmiyorum) ama muhtemelen OR dediğinizde UNION çalışıyordur yani otomatik olarak bu şekilde arıyordur. Sonuçları ms ler bazında olan sorgularda zaten sorun değil. Size tavsiyem tabloyu şişirip ikisini de ayrı ayrı test etmeniz, (mesela öyle bi sorgu yazın ki sonuç 40-50sn sÃŒrsÃŒn) sonra da bizlerle paylaşmanız.


Uygar UZUNHASAN
uygaruzunhasan at yahoo.com



----- Original Message ----
From: OKAN ARI <liste at ari-tech.com>
To: linux-programlama at liste.linux.org.tr
Sent: Saturday, December 29, 2007 6:01:18 PM
Subject: [Linux-programlama] Re: SQL'de OR kullanÜmÜ ve performans


Tesekkurler, peki soyle bir mantık mı yurutmek lazım. OR kullanmak yerine UNİON ile tabloları birlestirmek her zaman daha iyidir? Zira bu seklde cidden sadece sql bazında cıkan ufak kayıtlar birlestirildi.

Ancak bası sırgularda 10 larca OR var. Buların her birini UNION ile birlestirmek mantıklı mıdır? Yoksa duruma gore sekilendirmek mi lazım?


----- Original Message -----
From: Uygar UZUNHASAN
To: linux-programlama at liste.linux.org.tr
Sent: Saturday, December 29, 2007 5:52 PM
Subject: [Linux-programlama] Re:SQL'de OR kullanÜmÜ ve performans


SELECT * FROM tablo WHERE x='1'
UNION
SELECT * FROM tablo WHERE y='1'


Uygar UZUNHASAN
uygaruzunhasan at yahoo.com



----- Original Message ----
From: OKAN ARI <liste at ari-tech.com>
To: linux-programlama at liste.linux.org.tr
Sent: Saturday, December 29, 2007 5:08:05 PM
Subject: SQL'de OR kullanÜmÜ ve performans


Ornegin 10.000 kayÅ­tlÅ­ bir tabloda SELECT * FROM tablo WHERE x='1' OR y='1'

die bi sorgumuz olsun.

Biliyoruz ki aslÅ­nda x='1' olan 14, y='1' olan 10 kayÅ­t var.

Bu sorgunun yanÅ­tÅ­ bulnurken tum 10.000 kayÅ­t tek tek inceleniyor (EXPLAN ile gordugum). Bu da son derece ciddi br performans dususune neden oluyor. Bu baglamda

SQL'de OR kullanmak bu kadar performans dusuruyorsa (ki boyle bir reel tabloda sorgu 0.15sn suruyor) bunun bir cozumu olmalÅ­ die dusunuyorum. Topamda max 24 kayÅ­t verecek bir sorgu icin 10.000 kaydÅ­n tektek incelenmeden olasulmasÅ­nn bir yolu var mdÅ­Å­r?

SaygÅ­lar

OKAN





----------------------------------------------------------------------------
Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now.


_______________________________________________
Linux-programlama mailing list
Linux-programlama at liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama





------------------------------------------------------------------------------
Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now.


------------------------------------------------------------------------------


_______________________________________________
Linux-programlama mailing list
Linux-programlama at liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
-------------- sonraki bölüm --------------
Bir HTML eklentisi temizlendi...
URL: http://liste.linux.org.tr/pipermail/linux-programlama/attachments/20071229/640cada6/attachment.html
Atif CEYLAN
2007-12-30 06:06:18 UTC
Permalink
Tabloyu sisirip testlet yapýyorum, zaten yazdýklarým da bu bilgiler
ýsýgýnda:)
10 bin kayýttan bahsetmiþsiniz ki bu rakam satýr satýr oluþturulan plain
text bir dosyada bile tutulsa iþinizi görür. Hele tabloya 10-20 milyon
kayýt bi atýn bakalým. ayrýca yapacaðýnýz iþlemlerde tablo
birleþtirmeler, iç içe sorgular felan varsa iþ çok daha farklý boyutlara
varýr. Veritabaný Sistemlerinde Sql motorunun çalýþma mantalitesi ile
ters düþebilecek sqller yazmamak gerek. Genelde çoðu Veritabaný Sistemi
sqli sondan baþa yorumlar ve en sonda koyacaðýnýz and operatorlu indexli
bir alanýn sorgu içerisinde baþta kullanýlýp bunun asýl durmasý gereken
yere or lu bir ifadenin ve indexsiz bir alanýn konulmasý iþi bayaðý
fark ettirir. Ayrýca en az 2 tablo birleþtirmediðiniz müddetce
kayýtlarýnýz yüz binlerce de olsa çoðu durumda ms ler ile dönen
sonuclarýnýz olacaktýr. ben gündelik kullanýmda bir mysql ve postgresql
db de milyonlarca kaydý bulunan tablolarý belirli þartlara göre
birleþtirip iþlem yapýyorum (kesinlikle postgresql çok daha verimli
joinlerde). Elimdeki sqllerin çoðunu deneme yanýlma ile elde ettim.
Bazen yeni bir istatistik almam gerekiyor önce deniyorum kilitlendiði
zamanlar oluyor (çok ilginçtir mysql sunucusu kilitleniyor :) ) ama
mantýklý bir iki hamle ile çalýþan bir sqle dönüþtürüyorum. bunlar
explain çýktýlarý veya farklý sql araçlarý ile test edilip yapýnýza en
uygun sqlleri hazýrlamak ile doðrudan alakalý.

kolay gelsin

Atýf CEYLAN

Loading...