Probeer de bestaande SQL in twee delen te splitsen en kijk wat de uitvoeringstijden voor elk zijn. Dit geeft hopelijk aan welk deel verantwoordelijk is voor de traagheid:
deel 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
en deel 2 (let hier op de inner join):
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
Ik verwacht dat deel 2 langer gaat duren. Hierbij denk ik dat een index op zowel table_1 als table_2 op date_coll zou helpen.
Ik denk niet dat de samengestelde index zou helpen bij je keuze.
Dit gezegd hebbende, is het moeilijk te diagnosticeren waarom de drie voorwaarden samen de prestaties zo slecht zouden beïnvloeden. Het lijkt verband te houden met uw gegevensdistributie. Niet zeker over mySql, maar in Oracle zou een verzameling statistieken over die tabellen een verschil maken.
Ik hoop dat het helpt.