MySQL, serta semua sistem lain kecuali SQL Server, dapat mengoptimalkan LEFT JOIN/IS NULL mengembalikan FALSEsegera setelah nilai yang cocok ditemukan, dan itu adalah satu-satunya sistem yang peduli untuk mendokumentasikan perilaku ini. [...] Karena MySQL tidak dapat menggunakan HASHdan MERGEbergabung dengan algoritma, satu-satunya ANTI JOINyang mampu adalahNESTED LOOPS ANTI JOIN
[...]
Pada dasarnya, [ NOT IN] adalah persis rencana yang sama yang LEFT JOIN/ IS NULLkegunaan, meskipun fakta rencana ini dijalankan oleh cabang yang berbeda dari kode dan mereka terlihat berbeda dalam hasil EXPLAIN. Algoritma pada kenyataannya sama dan kueri lengkap pada saat yang sama.
[...]
Sulit untuk mengatakan alasan yang tepat untuk [penurunan kinerja saat menggunakan NOT EXISTS] , karena penurunan ini linear dan tampaknya tidak bergantung pada distribusi data, jumlah nilai di kedua tabel, dll., Selama kedua bidang diindeks. Karena ada tiga bagian kode di MySQL yang pada dasarnya melakukan satu pekerjaan, ada kemungkinan bahwa kode yang bertanggung jawab untuk EXISTSmembuat semacam pemeriksaan tambahan yang membutuhkan waktu ekstra.
[...]
MySQL dapat mengoptimalkan ketiga metode untuk melakukan semacam NESTED LOOPS ANTI JOIN. […] Namun, ketiga metode ini menghasilkan tiga paket berbeda yang dijalankan oleh tiga kode berbeda. Kode yang mengeksekusi EXISTSpredikat sekitar 30% kurang efisien [...]
Itu sebabnya cara terbaik untuk mencari nilai yang hilang di MySQL menggunakan a LEFT JOIN/ IS NULLatau NOT INbukan NOT EXISTS.
(penekanan ditambahkan)