Cobalah untuk membagi SQL yang ada menjadi dua bagian dan lihat waktu eksekusi untuk masing-masing bagian. Mudah-mudahan ini akan memberi Anda bagian mana yang bertanggung jawab atas kelambatan:
bagian 1:
SELECT table_1.id
FROM table_1
LEFT JOIN table_2
ON (table_1.id = table_2.id)
WHERE table_1.col_condition_1 = 0
AND table_1.col_condition_2 NOT IN (3, 4)
AND table_2.id is NULL
dan part 2 (perhatikan inner join disini):
SELECT table_1.id
FROM table_1
JOIN table_2
ON (table_1.id = table_2.id)
WHERE table_1.col_condition_1 = 0
AND table_1.col_condition_2 NOT IN (3, 4)
AND table_1.date_col > table_2.date_col
Saya berharap bagian 2 akan memakan waktu lebih lama. Dalam hal ini saya pikir indeks pada table_1 dan table_2 pada date_coll akan membantu.
Saya tidak berpikir indeks komposit akan membantu sama sekali dalam pilihan Anda.
Ini mengatakan sulit untuk mendiagnosis mengapa ketiga kondisi itu bersama-sama akan berdampak buruk pada kinerja. Tampaknya terkait dengan distribusi data Anda. Tidak yakin tentang mySql tetapi di Oracle, koleksi statistik pada tabel tersebut akan membuat perbedaan.
Semoga membantu.