Nested Loops: Dış veri kümesindeki (Outer) her bir satır için iç veri kümesinde (Inner) bir arama yapıldığı anlamına gelmektedir.
Görseldeki şekilde Outer
kümesindeki veriler için Inner
kümesindeki verileri tek tek gezer.
Query Processor, cost hesabına göre, iç veri kümesi üzerinde yapılacak aramaların performansını arttırmak için dış veri kümesinde sıralama işlemi (spool) yapılıp yapılmayacağına karar verir.
Nested Loops tipleri
Naive nested loops join: Inner
veri kümesinde uygun index yok ise scan (yukarıdaki görseldeki gibi, tek tek satır gezme) işlemi yapılarak veriler eşleştirilir.
Index nested loops join: Eğer uygun bir index var ise bu durumda seek yapılır. Outer
veri kümesindeki karşılık gelen değere direkt olarak Inner
veri kümesi üzerinden (index yardımıyla) erişilerek veriler eşleştirilir.
Temporary index nested loops join: Query Processor spool yapmaya karar verirse aynı şekilde seek yapılır.
Ne zaman ortaya çıkar?
- Veri kümelerinden birinde kayıtlar az olduğunda (ya da SQL Server öyle düşündüğünde)
- RID ve Key Lookup olduğunda
- Force olarak belirtildiyse
Outer
üzerindeki veri sayısı az ve Inner
üzerinde doğru index var ise Nested Loops; merge ve hash join’den daha performanslıdır. Bu sebeple az satır üzerinde işlem yapılan bir çok transaction üzerinde Nested Loops görülecektir.
SQL Server; statistics, index ve sorgu yazış biçimine bağlı olarak veri kümelerinin küçük olduğunu düşünüp Nested Loops kullanmayı seçebilir. Bu sebeple Nested Loops operatörü görüldüğünde veri kümelerinin gerçekten küçük olup olmadığı kontrol edilmelidir, büyük veri kümeleri üzerinde görseldeki gibi tek tek satır eşleştirme işlemi yüksek CPU ve IO tüketimine sebep olacaktır.
1 yorum