Nested Loops nedir? #ExecutionPlanOperators

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

Yorum Gönderin

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.