SELECT ve GROUP BY deyimlerinde aynı hesaplamaya sahibim. SQL Server aslında bu hesaplamaları iki kez yapıyor mu, yoksa sadece bir kez yapmak için yeterince akıllı mı?
Basit yanıt, SQL Server'ın yürütme zamanında ne zaman ve kaç kez skaler ifadenin değerlendirileceği konusunda genel bir garanti vermemesidir.
Optimize edici ve yürütme motoru içinde, skaler ifadelerin yerleştirilmesi, yürütülmesi ve önbelleğe alınması ile ilgili her türlü karmaşık (ve belgesiz) davranış vardır. Çevrimiçi Kitaplar'ın bunun hakkında söyleyecek çok şeyi yoktur , ancak söylediği şey şudur:

Bu, daha önce bahsettiğim davranışlardan birini, ifadelerin ertelenmesini açıklar. Bu blog yazısında (ki her zaman değişebilir) diğer mevcut davranışlardan bazıları hakkında yazdım .
Diğer bir husus, sorgu optimize edici tarafından kullanılan maliyet modelinin şu anda skaler ifadeler için maliyet tahmini yolunda fazla bir şey yapmamasıdır . Güçlü bir maliyet çerçevesi olmadan, mevcut sonuçlar geniş sezgisel tarama veya saf şansa dayanmaktadır.
Çok basit ifadeler için, ifadenin çoğu durumda bir kez mi yoksa birçok kez mi değerlendirileceği pek fark etmez. Bununla birlikte, ifade çok sayıda kez gereksiz olarak değerlendirildiğinde performansın olumsuz etkilendiği veya sorgulamanın yürütmenin paralel bir dalında değerlendirmenin avantajlı olacağı tek bir iş parçacığında gerçekleştiği büyük sorgularla karşılaştım. plan.
Özetle, mevcut davranış tanımlanmamıştır ve yürütme planlarında ne olduğunu anlamanıza yardımcı olacak çok fazla bir şey yoktur (ve blog yayınında olduğu gibi ayrıntılı motor davranışlarını incelemek için bir hata ayıklayıcı eklemek her zaman uygun olmayacaktır).
Skaler değerlendirme sorunlarının performans açısından önemli olduğu vakalarla karşılaşırsanız, sorunu Microsoft Destek ile gündeme getirin. Bu, ürünün gelecekteki sürümlerini iyileştirmek için geri bildirim sağlamanın en iyi yoludur.