Bir sorgu TOP n içerdiğinde, veritabanı motoru TOP yan tümcesini görmezden gelen sorguyu çalıştıracağını ve daha sonra sonunda istenen satır sayısını belirten bu sonucu küçülteceğini tahmin ederdim. Grafiksel uygulama planı bunun böyle olduğunu gösteriyor gibi görünüyor - TOP "son" adımdır. Ama görünen o ki daha fazlası oluyor.
Yukarıdakilerin ifade edilme şekli, bir sorgunun nasıl yürüdüğüne dair yanlış bir zihinsel resminiz olabileceğini düşündürüyor. Bir sorgu planındaki bir işleç bir adım değildir (önceki adımın tam sonuç kümesinin sonraki adımla değerlendirildiği.
SQL Server , her operatörün Init () , GetRow () ve Close () gibi yöntemleri gösterdiği bir boru hattı yürütme modeli kullanır . Şöyle GetRow () adından da anlaşılacağı, bir operatör (şekilde üst operatör tarafından gerekli) isteğe bağlı olarak her seferinde bir satır üretir. Bu, Bloglar Çevrimiçi Gönderim Mantıksal ve Fiziksel İşleçler referansında belgelenmiştir ve blog gönderimde neden Sorgu Planlarının Geriye Doğru Çalıştırıldığını ayrıntılı olarak açıklamaktadır . Her seferinde bu satır modeli, sorgu yürütme için bir ses sezgisi oluşturulmasında esastır.
Sorum şu, TOP
n cümlesi bir sorgunun yürütme planını nasıl (ve neden) etkiler?
TOP
Yarı birleştirmeler ve FAST n
sorgu ipucu gibi bazı mantıksal işlemler , sorgu optimize edicinin uygulama planı alternatiflerini maliyetlendirme yöntemini etkiler. Temel fikir, olası bir plan şeklinin ilk n sırasını, tüm satırları döndürmek için optimize edilmiş farklı bir plandan daha hızlı bir şekilde döndürmesi olabilir .
Örneğin, endekslenmiş iç içe döngüler birleştirme işlemi, az sayıda satır döndürmenin en hızlı yoludur, ancak taramalarla karma veya birleştirme, daha büyük kümelerde daha etkili olabilir. Sorgu iyileştiricisinin bu seçimlerle ilgili nedenleri , işlemlerin mantıksal ağacında belirli bir noktaya bir Satır Hedefi koymaktır.
Bir satır hedefi, sorgu planı alternatiflerinin maliyetlendirilme biçimini değiştirir. Bunun özü, optimizer’in her bir operatöre, tam sonuç kümesi gerekliyse maliyetlendirmesiyle başlar, uygun noktada bir satır hedefi belirler ve daha sonra incelemesi gereken satır sayısını tahmin eden plan ağacından aşağı doğru çalışır. Satır hedefine ulaşmak için.
Örneğin, bir mantıksal TOP(10)
mantıksal sorgu ağacında belirli bir noktada 10'luk bir satır hedefi belirler. Satır hedefine giden operatörlerin maliyetleri, satır hedefine ulaşmak için kaç satır üretmeleri gerektiğini tahmin etmek için değiştirilir. Bu hesaplama karmaşık bir hale gelebilir, bu nedenle tüm bunları tam çalışılmış bir örnek ve açıklamalı uygulama planları ile anlamak daha kolaydır . Satır hedefleri birleştirme türü seçiminden veya taramalar için arama ve aramaların tercih edilip edilmeyeceğinden daha fazla etkileyebilir. Bununla ilgili daha fazla ayrıntı burada .
Her zaman olduğu gibi, sıralı bir hedef temelinde seçilen bir uygulama planı, optimize edicinin muhakeme yeteneklerine ve kendisine sunulan bilgilerin kalitesine tabidir. Sıralı bir hedefi olan her plan pratikte gereken sayıda satırı daha hızlı üretemez, ancak maliyet modeline göre üretecektir.
Bir satır hedefi planının daha hızlı olmadığını kanıtladığı zaman, genellikle sorguyu değiştirmenin veya optimize ediciye doğal olarak seçilen planın en iyi olacağı şekilde daha iyi bilgi sağlamanın yolları vardır. Durumunuzda hangi seçeneğin uygun olduğu elbette ki ayrıntılarına bağlıdır. Satır hedefi özelliği genellikle çok etkilidir (buna rağmen paralel uygulama planlarında kullanıldığında dikkat edilmesi gereken bir hata vardır ).
Özel sorgunuz ve planınız burada ayrıntılı analiz için uygun olmayabilir (elbette dilerseniz gerçek bir uygulama planı sunun) ancak burada ana hatlarıyla açıklanan fikirler ilerlemenizi sağlayacak.
ORDER BY
cümlesi var.TOP
Planda bu türün gerçekleştiği yerlere değişiklik eklemek , ancak indeksin B tablosuna karşı arama yapmasının uygulama sayısını nasıl etkilediği konusunda daha fazla endişeliyim ... (tabii ki ikisi ilişkili olabilir - bilmiyorum)