Selasa, Desember 24, 2019

IN SELECT plus EXISTS

Environment
  1. MySQL 5.7.27
  2. Centos 6.10
mysql> DELETE FROM CSV_DATA
WHERE FILE_ID IN ( SELECT FILE_ID FROM CSV_FILE WHERE FILE_STATUS = 7)
LIMIT 100000

129 sec
Nampak-nya seluruh row akan di-scan dan nilai FILE_ID pada setiap setiap row akan dibandingkan dengan hasil dari IN SELECT .
mysql> DELETE FROM CSV_DATA
WHERE EXISTS ( SELECT FILE_ID FROM CSV_FILE WHERE FILE_STATUS = 7 )
  AND FILE_ID IN ( SELECT FILE_ID FROM CSV_FILE WHERE FILE_STATUS = 7 )
LIMIT 100000

0 sec
Nilai dari EXIST akan di-evaluate dan bila row tidak ditemukan maka perbandingan selanjutkan tidak di-evaluate.

Dalam case ini, LIMIT digunakan untuk mempersingkat waktu locking terhadap table CSV_DATA. Statement JOIN tidak dapat digunakan karena tidak compatible dengan LIMIT .

Tidak ada komentar:

Posting Komentar