Anda tidak dapat mengandalkan urutan database yang akan mengevaluasi ekspresi pemfilteran. Ada pengoptimal kueri yang akan mengevaluasi SQL Anda dan membuat rencana untuk mengeksekusi kueri berdasarkan apa yang dianggapnya akan menghasilkan kinerja terbaik .
Dalam konteks ini, IsNumeric()
tidak dapat digunakan dengan indeks, dan itu berarti menjalankan fungsi terhadap setiap baris dalam tabel. Oleh karena itu, hampir tidak akan pernah memberikan kinerja yang dirasakan terbaik. Bandingkan ini dengan SrcID > 15
ekspresi, yang dapat dicocokkan dengan indeks (jika ada), dan hanya ekspresi operator tunggal meskipun tidak ada. Ini juga dapat digunakan untuk menyaring jumlah baris potensial di mana IsNumeric()
fungsi perlu dijalankan.
Anda mungkin bisa menyiasatinya dengan tampilan, subquery, CTE, pernyataan CASE, atau kolom yang dihitung. Berikut ini contoh CTE:
With NumericOnly As
(
SELECT <columns> FROM MyTable WHERE IsNumeric(SrcID) = 1
)
SELECT <columns> FROM NumericOnly WHERE SrcID > 15
Dan inilah opsi pernyataan KASUS:
SELECT <columns> FROM MyTable WHERE CASE WHEN IsNumeric(SrcIC) = 1 THEN Cast(SrcID As Int) ELSE 0 END > 15