Saya menggunakan SQL Server 2008 R2 dan saya punya permintaan semu (SP) ini:
select ...
from ...
WHERE @LinkMode IS NULL
AND (myColumn IN (...very long-running query...))
...
...
Masalahnya adalah bahwa kueri membutuhkan waktu yang sangat lama untuk dieksekusi - bahkan jika saya menjalankan SP dengan @LinkMode=2
.
Seperti yang Anda perhatikan, permintaan yang sudah berjalan lama harus dijalankan hanya jika @LinkMode adalah nol, yang tidak berlaku di sini. Dalam kasus saya @LinkMode = 2!
Namun, jika saya mengubahnya ke:
select ...
from ...
WHERE 1=2
AND (myColumn IN (...very long time exeted query...))
...
...
SP tidak berjalan cepat.
Saya pernah mendengar sebelumnya bahwa terkadang optimizer dapat mengoptimalkan urutan kriteria.
Jadi saya bertanya:
Bahkan jika optimizer memilih rute yang berbeda, apa yang bisa lebih cepat daripada memeriksa jika
=null
? Maksudku, saya berpikir bahwa pemeriksaanif a==null
adalah jauh lebih cepat daripada menjalankan query panjang lainnya ...Bagaimana saya bisa memaksa SQL Server untuk menjalankan kueri seperti yang saya tulis (urutan yang sama)?
sumber