Yürütme planlarına ilk bakış, ifadenin 1/0
Hesaplama Skaler işleçlerinde tanımlandığını gösterir :
Şimdi, yürütme planları en solda çalışmaya başlasa da, yinelemeli arama Open
ve GetRow
alt yineleyicilere sonuçları döndürme yöntemleri, SQL Server 2005 ve sonraki sürümleri, ifadelerin genellikle bir Hesaplama Ölçeği tarafından tanımlanmasını , böylece bir sonraki aşamaya kadar ertelenmesi gereken bir optimizasyon içerir. işlem sonucu gerektirir :
Bu durumda, ifade sonucu yalnızca satırı müşteriye geri gönderilmek üzere toplarken gereklidir (ki bu yeşil SELECT
simgede gerçekleşeceğini düşünebilirsiniz ). Bu mantıkla, ertelenmiş değerlendirme, ifadenin asla değerlendirilmediği anlamına gelir, çünkü hiçbir plan bir geri dönüş satırı oluşturmaz. Bu noktaya biraz emek vermek için, ne Kümelenmiş Dizin Arayışı ne de Tablo Taraması bir satır döndürür, böylece müşteriye geri dönmek için bir araya getirilecek satır yoktur.
Ancak, bazı ifadelerin çalışma zamanı sabitleri olarak tanımlanabildiği ve sorgu yürütme başlamadan önce bir kez değerlendirildiği ayrı bir optimizasyon vardır . Bu durumda, bunun gerçekleştiğine dair bir gösterge showplan XML'de bulunabilir (solda Kümelenmiş Dizin Ara planı, sağdaki Tablo Tarama planı):
Bu blog yazısında altta yatan mekanizmalar ve performanslarını nasıl etkileyebilecekleri hakkında daha fazla yazdım . Burada verilen bilgileri kullanarak ilk sorguyu değiştirebiliriz, böylece her iki ifade de yürütme başlamadan önce değerlendirilir ve önbelleğe alınır:
select 1/0 * CONVERT(integer, @@DBTS)
from #temp
where id = 1
select 1/0
from #temp2
where id = 1
Şimdi, ilk plan aynı zamanda sabit bir ifade referansı içeriyor ve her iki sorgu da hata mesajını veriyor. İlk sorgu için XML içerir:
Daha fazla bilgi: Skaler, İfadeler ve Performansı Hesapla