SQL Sorgusu - Altında Kayıt Olan Veriler
-
select * from Kategori where id in (select distinct kat_id from Urunler)
Ürünlerde aktif pasif durumu varsa onuda sorguya ekleyebilirsin hocam
select * from Kategori where id in (select distinct kat_id from Urunler where AktifMi=1) gibi
Yazilimci tarafından 05/Nis/17 11:57 tarihinde düzenlenmiştir -
cemnet bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdı
select k.*
from Kategori k
inner join Urun u on u.KatD = k.ID
Bu istediği sonucu vermiyorsa ya ben anlayamadım ya sen anlatamadın ya da yanlış kontrol ediyorsun. Bana anlattığına göre bu senin için en doğru sonucu vermesi gerekiyor.
:)
Kategoriler
id adi
1 Spor
2 Magazin
Ürünler
id kat_id adi
1 1 bla bla
2 1 xx xxx
şu üstte ki kayda göre bana öyle bi select at ki hocam sadece spor kategorisini versin sonuç olarak. Az önce üstte yazdığın inner joinli olan sorgunun sonucunda 2 tane alt alta spor kaydı dönüyor.select k.adi
from Kategori k
inner join Urun u on u.KatD = k.ID
group by k.adi
-
_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdı
select k.*
from Kategori k
inner join Urun u on u.KatD = k.ID
Bu istediği sonucu vermiyorsa ya ben anlayamadım ya sen anlatamadın ya da yanlış kontrol ediyorsun. Bana anlattığına göre bu senin için en doğru sonucu vermesi gerekiyor.
:)
Kategoriler
id adi
1 Spor
2 Magazin
Ürünler
id kat_id adi
1 1 bla bla
2 1 xx xxx
şu üstte ki kayda göre bana öyle bi select at ki hocam sadece spor kategorisini versin sonuç olarak. Az önce üstte yazdığın inner joinli olan sorgunun sonucunda 2 tane alt alta spor kaydı dönüyor.select k.adi
from Kategori k
inner join Urun u on u.KatD = k.ID
group by k.adi
Hocam bu sorgu ortalama olarak (çekilen sütun sayısının fazlalığına bağlı olarak) benim yazdığım sorgunun 2 katı (sadece kategori adı sütunu çekilirse) sürede çalışır. Yani "select * from Kategori where id in (select distinct kat_id from Urunler where AktifMi=1)" bu sorgu 10 milisaniyede çalışırsa senin sorgu 20 milisaniyede çalışır. Alabileceği en performanslı sorgu "select * from Kategori where id in (select distinct kat_id from Urunler where AktifMi=1)" bu.
-
Yazilimci bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdı
select k.*
from Kategori k
inner join Urun u on u.KatD = k.ID
Bu istediği sonucu vermiyorsa ya ben anlayamadım ya sen anlatamadın ya da yanlış kontrol ediyorsun. Bana anlattığına göre bu senin için en doğru sonucu vermesi gerekiyor.
:)
Kategoriler
id adi
1 Spor
2 Magazin
Ürünler
id kat_id adi
1 1 bla bla
2 1 xx xxx
şu üstte ki kayda göre bana öyle bi select at ki hocam sadece spor kategorisini versin sonuç olarak. Az önce üstte yazdığın inner joinli olan sorgunun sonucunda 2 tane alt alta spor kaydı dönüyor.select k.adi
from Kategori k
inner join Urun u on u.KatD = k.ID
group by k.adi
Hocam bu sorgu ortalama olarak (çekilen sütun sayısının fazlalığına bağlı olarak) benim yazdığım sorgunun 2 katı (sadece kategori adı sütunu çekilirse) sürede çalışır. Yani "select * from Kategori where id in (select distinct kat_id from Urunler where AktifMi=1)" bu sorgu 10 milisaniyede çalışırsa senin sorgu 20 milisaniyede çalışır. Alabileceği en performanslı sorgu "select * from Kategori where id in (select distinct kat_id from Urunler where AktifMi=1)" bu.
407 BİN 412 kayıtta test ettim.
Senin söyledğin sorguda 11.2 saniye. Benim yazdığım sorguda 5 saniyede geldi :)
Bence sende bir test et.. Çünkü where ifadesine bir kısıtlama getiriyorsun. Bu kısıtlamada bir set daha döndürmeye çalışıyor. ve döndürdüğü sete filtre uyguluyor.
En azından benim yorumum ve gözlemlediğim bu..
-
_DevLop_ bunu yazdıYazilimci bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdıcemnet bunu yazdı_DevLop_ bunu yazdı
select k.*
from Kategori k
inner join Urun u on u.KatD = k.ID
Bu istediği sonucu vermiyorsa ya ben anlayamadım ya sen anlatamadın ya da yanlış kontrol ediyorsun. Bana anlattığına göre bu senin için en doğru sonucu vermesi gerekiyor.
:)
Kategoriler
id adi
1 Spor
2 Magazin
Ürünler
id kat_id adi
1 1 bla bla
2 1 xx xxx
şu üstte ki kayda göre bana öyle bi select at ki hocam sadece spor kategorisini versin sonuç olarak. Az önce üstte yazdığın inner joinli olan sorgunun sonucunda 2 tane alt alta spor kaydı dönüyor.select k.adi
from Kategori k
inner join Urun u on u.KatD = k.ID
group by k.adi
Hocam bu sorgu ortalama olarak (çekilen sütun sayısının fazlalığına bağlı olarak) benim yazdığım sorgunun 2 katı (sadece kategori adı sütunu çekilirse) sürede çalışır. Yani "select * from Kategori where id in (select distinct kat_id from Urunler where AktifMi=1)" bu sorgu 10 milisaniyede çalışırsa senin sorgu 20 milisaniyede çalışır. Alabileceği en performanslı sorgu "select * from Kategori where id in (select distinct kat_id from Urunler where AktifMi=1)" bu.
407 BİN 412 kayıtta test ettim.
Senin söyledğin sorguda 11.2 saniye. Benim yazdığım sorguda 5 saniyede geldi :)
Bence sende bir test et.. Çünkü where ifadesine bir kısıtlama getiriyorsun. Bu kısıtlamada bir set daha döndürmeye çalışıyor. ve döndürdüğü sete filtre uyguluyor.
En azından benim yorumum ve gözlemlediğim bu..
Test edebileceğim bir data yok hocam :) Çektiğin tablonun veri yapılanmasını bilmiyorum hocam bu sebeple o data üzerine yorum yapamıyorum. Benim sorguda da sadece kategori adını select etmeyi denedin mi hocam yoksa * la mı select ettin.
Hoş ben hala inat ediyorum o sorgu joinden daha hızlı çalışır :)
-
Id kolonuna primary key yapıp, diğer kolonları da indexleyip sorgularını hızlandırabilirsin.
-
arkadaşlar teşekkür ediyorum. data çokluğuna göre iki t-sql'i de test edeceğim.
Bu arada 3. bi ihtimal olarakta. Kategori tablosuna bi sutün daha açıp (UrunAdet), daha sonra ürünlerde ekleme çıkarma yapınca o satırı güncellemeyi de düşünüyorum. Daha sonra
select * from kategori where UrunAdet<>0 şeklinde de çalıştırabilirim ilerde. Ancak şimdi değil :)
-
Şunu iyi anlamak lazım. select * diyerek joinli ya da joinsiz bir sorguyu getirmekle select kolon1, kolon2, kolon3 diye sorguyu getirmek arasında performans farkı gözle görülür şekilde değişiyor.
Bunu milyon kayıtlı datalarla sürekli haşır neşir olduğumdan dolayı söylüyorum. Gereksiz kolonları koymaktansa çok ihtiyaç yok ise select kolon adı şeklinde yazılması daha doğru olur..
Bu birincisiydi.
İkinci olarak ise; kayıtları 2 defa çağırıyorsunuz, benim yazdığım mantıkta ise bir defa çağırıyor ve grupluyoruz.
Söylediğim gibi biraz önce bu kayıtlarda test yaparak gözlemlediğim sonuçları aktarmaya çalıştım. İkna olmak isteyen var ise datalara çektiğim sorguların ss larını pm atabilirim :)