Bu iki ifadeyi inceleyelim:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
Eğer CONDITION 1
DİR TRUE
, olacak CONDITION 2
denetlenebilir?
Eğer CONDITION 3
DİR FALSE
, olacak CONDITION 4
denetlenebilir?
Peki ya koşullar WHERE
: SQL Server motoru bir koşuldaki tüm koşulları optimize ediyor WHERE
mu? Programcılar , SQL Server iyileştiricisinin doğru şekilde çözdüğünden emin olmak için koşulları doğru sıraya yerleştirmeli mi?
KATMA:
Bağlantı için Jack'e teşekkürler, t-sql kodundan şaşırtın:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
Bu durumda , bir Sıfır İstisnası artışı yoktur .
SONUÇ:
C ++ / C # / VB kısa devre yapıyorsa, neden SQL Server'da bulunamıyor?
Buna gerçekten cevap vermek için ikisinin de şartlarla nasıl çalıştığına bir göz atalım. C ++ / C # / VB kod çalıştırma işlemini hızlandırmak için tüm dil özelliklerinde tanımlanan kısa devrelere sahiptir. Neden ilki zaten doğru olduğunda N VEYA koşullarını veya ilki zaten yanlış olduğunda M VE koşullarını değerlendirmeyi neden rahatsız etmeyin?
Geliştiriciler olarak, SQL Server'ın farklı çalıştığını bilmeliyiz. Maliyete dayalı bir sistemdir. Sorgumuz için en uygun uygulama planını elde etmek için sorgu işlemcisinin her koşulunu değerlendirmesi ve bir maliyet vermesi gerekir. Bu maliyetler daha sonra SQL Server'ın iyi bir plan için tanımladığı eşiğin altında olması gereken bir eşik değeri oluşturmak için bir bütün olarak değerlendirilir. Maliyet tanımlanmış olan eşik değerden düşükse, plan kullanılır, tüm işlem farklı koşul maliyetlerinin karışımıyla tekrar edilir. Buradaki maliyet, bir tarama veya arama veya bir birleştirme veya bir karma birleştirme vb .'dir. Bir sütunda indeksi kullanmaya zorlamanın kısa devre olarak sayıldığını düşünebilirsiniz, ancak öyle değildir. Sadece bu endeksin kullanımını zorlar ve bununla birlikte olası uygulama planlarının listesini kısaltır. Sistem hala maliyete dayalı.
Bir geliştirici olarak, SQL Server'ın diğer programlama dillerinde olduğu gibi kısa devre yapmadığını ve onu zorlamak için yapabileceğiniz bir şey olmadığını unutmayın.