Zkuste rozdělit existující SQL na dvě části a zjistěte, jaké jsou doby provádění pro každou z nich. To by vám, doufejme, poskytlo část, která je zodpovědná za pomalost:
část 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
a část 2 (všimněte si vnitřního spojení zde):
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
Očekávám, že druhý díl bude trvat déle. V tomto si myslím, že by pomohl index na table_1 a table_2 na date_coll.
Nemyslím si, že by vám složený index při výběru vůbec pomohl.
To znamená, že je těžké diagnostikovat, proč by tyto tři podmínky společně ovlivnily výkon tak špatně. Zdá se, že to souvisí s vaší distribucí dat. Nejsem si jistý mySql, ale v Oracle by shromažďování statistik v těchto tabulkách znamenalo rozdíl.
Doufám, že to pomůže.