SQL Server Yürütme planında, Dizin Taraması ile Dizin Araması arasındaki fark nedir
SQL Server 2005 kullanıyorum.
Yanıtlar:
Bir dizin taraması, SQL sunucusunun eşleşmeleri arayan dizinin tamamını okuduğu yerdir - bunun için gereken süre dizinin boyutuyla orantılıdır.
Bir dizin arama, SQL sunucusunun doğrudan eşleşen kayıtları aramak için dizinin b-ağaç yapısını kullandığı yerdir (bunun nasıl çalıştığına dair bir fikir için bkz. Http://mattfleming.com/node/192 ) - alınan süre yalnızca orantılıdır eşleşen kayıtların sayısı.
İzlenecek temel kural Taramalar kötüdür, Arayışlar iyidir.
Dizin Taraması
SQL Server bir tarama yaptığında, okumak istediği nesneyi diskten belleğe yükler, ardından bu nesneyi yukarıdan aşağıya doğru okuyarak ihtiyaç duyduğu kayıtları arar.
Dizin Arama
SQL Server bir arama yaptığında, verinin dizinde nerede olacağını bilir, böylece dizini diskten yükler, doğrudan ihtiyaç duyduğu dizine gider ve ihtiyaç duyduğu verinin nerede bittiğini okur. . Bu açıkça bir taramadan çok daha verimli bir işlemdir, çünkü SQL aradığı verilerin nerede olduğunu zaten biliyor.
Tarama yerine Arama kullanmak için bir Yürütme Planını nasıl değiştirebilirim?
SQL Server verilerinizi ararken, muhtemelen SQL Server'ın aramadan taramaya geçmesini sağlayacak en büyük şeylerden biri, aradığınız sütunlardan bazılarının kullanmak istediğiniz dizine dahil edilmediği zamandır. Kümelenmiş dizin tablodaki tüm sütunları içerdiğinden, çoğu zaman bu, SQL Server'ın kümelenmiş dizin taraması yapmaya geri dönmesine neden olur. Bu, sütunları dizinin dizinlenmiş sütunlarına eklemeden bir dizindeki sütunları DAHİL ETME yeteneğine sahip olmamızın (en azından bence) en büyük nedenlerinden biridir. Dizine ek sütunlar ekleyerek dizinin boyutunu arttırırız, ancak SQL Server'ın bu değerleri almak için kümelenmiş dizine veya tabloya geri dönmek zorunda kalmadan dizini okumasına izin veririz.
Referanslar
Bir SQL Server Yürütme planı dahilinde bu operatörlerin her birinin özelliklerine ilişkin bilgi için bkz. ....
Kısa cevap:
Dizin taraması: Belirli sütunlar dışında tüm satırlara dokunun.
Dizin arama: Belirli satırlara ve belirli sütunlara dokunun.
Bir Dizin Taraması, dizin tanımı arama tahminlerini karşılamak için tek bir satırda bulunamadığında gerçekleşir. Bu durumda SQL Server, arama tahminlerini karşılayan bir dizi satır bulmak için birden çok sayfayı taramalıdır .
Dizin Arama durumunda, SQL Server, dizin tanımını kullanarak arama tahminleriyle eşleşen tek bir satır bulur .
Index Seeks daha iyi ve daha etkilidir.
Tarama, peşinde olsanız da olmasanız da tablodaki her satıra dokunur
Bir arama, yalnızca aradığınız satırlara bakar.
Taramalar, verilere bakma biçiminde daha verimli oldukları için taramalardan her zaman daha iyidir.
İyi bir açıklama bulunabilir burada