Försök att dela upp befintlig SQL i två delar och se vilka exekveringstider som är för varje. Detta skulle förhoppningsvis ge dig vilken del som är ansvarig för långsamheten:
del 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
och del 2 (notera den inre sammanfogningen här):
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
Jag förväntar mig att del 2 kommer att ta längre tid. I detta tror jag att ett index på både table_1 och table_2 på date_coll skulle hjälpa.
Jag tror inte att det sammansatta indexet skulle hjälpa alls i ditt val.
Detta sa att det är svårt att diagnostisera varför de tre tillstånden tillsammans skulle påverka prestandan så illa. Det verkar vara relaterat till din datadistribution. Inte säker på mySql men i Oracle skulle en statistikinsamling på dessa tabeller göra skillnad.
Hoppas det hjälper.