Tautan Joe adalah titik awal yang baik. Quassnoi juga membahas ini.
Secara umum, jika bidang Anda diindeks dengan benar, ATAU jika Anda ingin memfilter lebih banyak catatan (yaitu memiliki banyak baris EXIST
di subquery) NOT EXISTS
akan berkinerja lebih baik.
EXIST
dan NOT EXISTS
keduanya hubung singkat - segera setelah catatan cocok dengan kriteria itu akan disertakan atau disaring dan pengoptimal pindah ke catatan berikutnya.
LEFT JOIN
akan bergabung dengan SEMUA REKAM terlepas dari apakah mereka cocok atau tidak, lalu saring semua catatan yang tidak cocok. Jika tabel Anda besar dan/atau Anda memiliki beberapa JOIN
kriteria, ini bisa sangat sangat intensif sumber daya.
Saya biasanya mencoba menggunakan NOT EXISTS
dan EXIST
jika memungkinkan. Untuk SQL Server, IN
dan NOT IN
secara semantik setara dan mungkin lebih mudah untuk ditulis. Ini adalah satu-satunya operator yang akan Anda temukan di SQL Server yang dijamin korsleting.