MSSQL Server Execution Plan RID Lookup Operatörü

Bu makalede RID Lookup operatörünü görmüş olacağız. Öncelikli bu operatörün  ne işe yaradığına değinelim. RID Lookup operatörü tablomuzda clustered index veya primary key olmadığı durumlarda tablomuz Heap Table yapısında ise  görülen bir operatördür.

Yukarıdaki sorgumuzda ModifiedDate kolunu için NonClustered index yapısını kullandığı daha sonra  clustered id olmadığı için row id değeri ile gerçek tablomuza bağlanıp diğer verilerin gelmesini sağladık. Index seek yapılmasının sebebi indexsin tarih kolonuna göre ilk sırada olmasıdır. Tarih kolonu indexsin ilk kolonu hariç herhangi bir sırada olmuş olsaydı index scan işlemi gerçekleşmiş olacaktı.

İlk olarak index seek operatör yapısının Tooltip yapısını inceleyelim.

Tooltip penceremizin en alt kısmına baktığımızda Output List kısmında “Bmk1000” şeklinde bir ifade yer almaktadır. “Bmk1000” değeri yapılan Indeks Seek işlemi ile ilişkili olarak bir tane de Bookmark Lookup işleminin gerçekleştirileceği anlamını taşımaktadır. RID Lookup işlemi yapılırken tablodaki her kayıt Row Identifier denilen benzersiz bir Key ile eşleştirilir. Diğer bir ifadeyle tablodaki veriler sanal bir clustered indeks ile temsil edilip veriye erişilirken bu indeks kullanılacaktır. Fakat bu işlem her ne kadar sanal da olsa clustered bir indeks kullanmış olsa bile Lookup işlemi olduğu için fazladan işlem yapılmakta olup bu işleminde sorgumuza azımsanmayacak bir maliyeti vardır. Bu yüzden diğer Lookup işlemleri gibi bu Lookup işleminden de kaçınmamız gerekmektedir. Bunun için de yukarıdaki bahsettiğimiz gibi özellikle büyük tablolar için en az bir tane Clustered indeks oluşturmamız gerekmektedir.

Şimdi de Execution planımızdaki asıl kısım olan RID Lookup operatörünü inceleyelim. Bu operatörde diğer Lookup operatörleri gibi Lookup işlemi yapmak için kullanılmaktadır. Şimdi RID Lookup operatörü üzerine gelip kısaca Tooltip penceremizi inceleyelim.

Execution planda bulunan RID Lookup parametresinin Tooltip penceresini gözlemleyelim.

Yukarıdaki Tooltip   penceresindeki  Seek  Predicates kısmını incelediğimizde

Seek Keys[1]:

Prefix: Bmk1000 = Scalar Operator([Bmk1000]) ifadesi ile karşılaşıyoruz.

Bu ifade bir önceki incelediğimiz indeks Seek operatöründeki Output List kısmında karşılaştığımız “Bmk1000” değeri istediğimiz veriye erişmek için Lookup Key olarak kullanılmıştır. Yukarıda da belirtildiği gibi RID Lookup operatörü de fazladan Lookup işlemi yapıldığı için özellikle çok fazla kaydın tutulduğu tablolarda bu işlemden olabildiğince kaçınılmalıdır. Bunun için de daha önce belirttiğimiz gibi ya clustered indeks oluşturulmalı ya da cover indeks kullanılmalıdır.

Tablomuzun üzerinde yukarıdaki ekran resminde belirtilen index yapısını sildiğimizde sorgumuz Table scan ile sonuç döndürecektir.

Bu makalede RID Lookup operatörüne değinmiş olduk. Başka bir makalede görüşmek dileğiyle..

Namazı dosdoğru kılın, zekatı verin; önceden kendiniz için hayır olarak neyi takdim ederseniz, onu Allah Katında bulacaksınız. Şüphesiz Allah, yaptıklarınızı görendir. Bakara Suresi, 110. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir