SQL Server Optimizasyonu: SELECT'in WHERE Fıkrası'ndan önce mi, sonra mı hesaplandı?

Sadece böyle bir ifadede SQL Server da eğer merak ediyordum:

SELECT A.Field1, dbo.someFunction(A.IdentifierID) As Field 
FROM Table A WHERE A.IdentifierID = 1000

Tablodaki tüm satırlar için bir işlev arayacak mı yoksa bir kez mi arayacak?

Teşekkürler!

0
Deneyin ve hangisinin daha hızlı olduğunu görün!
katma yazar vlad, kaynak

5 cevap

Her satır için çağrılacak

3
katma

çağrıların sayısı sonuçlanan satırlara bağlıdır, yani eğer sorgu 100 çıktısı çıktıysa 100 kez çağrılacak, tablodaki tüm satırlar için değil

ama eğer buradaki maddede olsaydı, her satır için değerlendirilecek

1
katma

Vlad yorumladıktan sonra denemelisiniz. Elbette iki seçenek var:

  1. IdentifierID'nin her zaman 1000 olacağını bilerek bunu bir kez daha söyleyebiliriz.

ama bu doğru bir şey olmayabilir ...

  1. Her satır için onu çağırabilir - belki de işlevin yan etkileri var mı?

2 numaralı şüpheliyim.

0
katma

Her satır için onu arayacak, ama belirli birini seçtiğinden (veya öyle görünüyorsa), örneğinizde bir kez çağrılacak.

0
katma

Uyumlu SQL sunucularının, SELECT yan tümcesini uygulamadan önce WHERE yan tümcesine uyguladıkları gibi görünmesi bekleniyor. Bu yüzden WHERE A.IdentifierID = 1000 değerini karşılayan her satır için işlevi en fazla bir kez değerlendirmek için görünmelidir .

Ancak veritabanı motorları, standartların gerektirdiği aynı sonuçları verdikleri sürece, istedikleri gibi optimize etmekte serbesttirler. Dolayısıyla sizin durumunuzda, tek bir kimlik numarası seçtiğinden, yalnızca bir kez işlevi değerlendirmek gerekebilir.

0
katma