Masalahnya adalah Anda menentukan dua kondisi dengan ATAU yang berlaku untuk tabel terpisah dalam kueri Anda. Karena itu, pencarian indeks nonclustered harus mengembalikan sebagian besar atau semua baris di tabel besar Anda karena logika OR berarti mereka mungkin juga cocok dengan klausa kondisi di tabel kedua.
Lihatlah rencana eksekusi SQL di ketiga contoh di atas, dan perhatikan jumlah baris yang keluar dari pencarian indeks nonclustered dari tabel besar. Hasil akhir hanya dapat mengembalikan 1.000 atau kurang dari 800.000 baris dalam tabel tetapi klausa OR berarti bahwa isi tabel itu harus dirujuk silang dengan kondisi di tabel kedua karena OR berarti mereka mungkin diperlukan untuk final keluaran kueri.
Bergantung pada rencana eksekusi Anda, pencarian indeks dapat menarik semua 800.000 baris dalam tabel besar karena mereka mungkin juga cocok dengan kondisi klausa OR di tabel kedua. UNION ALL adalah dua kueri terpisah terhadap satu tabel masing-masing, sehingga pencarian indeks hanya harus menampilkan kumpulan hasil yang lebih kecil yang mungkin cocok dengan kondisi kueri tersebut.
Saya harap ini masuk akal. Saya mengalami situasi yang sama saat memfaktorkan ulang pernyataan SQL yang berjalan lambat.
Semangat,
Andre Ranieri