Bu sabitler göz önüne alındığında, SQL Server her zaman belirli bir sorgu için aynı planı üretecek mi? Değilse, başka düşünceler var mı? Belirsizliğin de göz önünde bulundurulması gereken bir unsuru var mı?
Sorgu derlemesi bildiğim kadarıyla belirleyicidir. Orijinal QO tasarım hedeflerinden biri, veritabanının yalnızca istatistiki bir kopyasını kullanarak yürütme planlarının farklı bir sistemde yeniden oluşturulmasının mümkün olmasıydı . Kullanılabilir bellek miktarı ve mantıksal işlemci sayısı gibi yapılandırma parametreleri etrafında birkaç incelik vardır, ancak bunlar senkronize edilecek şeyler listeniz tarafından kapsanır.
Uyarı: Listenizdeki 'aynı' kelimesinin her açıdan aynı anlama gelmesi şartıyla bu doğrudur . Örneğin, 'aynı' istatistik iki sistem mevcut olabilecek, ancak bunlar sadece aynı histogram adımları ve yoğunluk bilgileri ise aynı .
Bununla birlikte, optimizasyon işlemi de son derece karmaşıktır , yani bu deterministik sürece tüm girdilerin aynı olmasını sağlamak ve tüm dahili durumların aynı kod yolunun belirli bir kod için optimize edici yoluyla alınmasını sağlayacak kadar benzer olmasını sağlamak zor olabilir. derleme. Sorgu veritabanının dışında (başka bir veritabanına veya örneğe) erişim içeriyorsa, bu ortamlar da aynı olmalıdır.
Listenize ekleyeceğim bir şey, herhangi bir plan kılavuzunun ikinci veritabanında da var olup olmadığını kontrol etmektir.
GETDATE()
Sorgularda olduğu gibi deterministik olmayan fonksiyonların kullanılması da farklı bir plana sahip olacağınız anlamına gelebilir. Ana optimizer değeri doğrudan kullanmasa da, kardinalite tahmini kullanılabilir (bkz . Kardinalite Tahmini Sırasında Sabit Katlama ve İfade Değerlendirmesi ). Bu fark sınıfının sorunun kapsamına girip girmediğinden emin değilim, çünkü her iki sistem de aynı anda yürütülürse aynı planı üretecektir (veya daha genel olarak aynı giriş değişkenleri, parametreler ve fonksiyon değerleri ile).