Hãy thử chia SQL hiện có thành hai phần và xem thời gian thực thi cho mỗi phần là bao nhiêu. Điều này hy vọng sẽ cung cấp cho bạn phần nào chịu trách nhiệm cho sự chậm chạp:
phần 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
và phần 2 (lưu ý phần tham gia bên trong tại đây):
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
Tôi hy vọng phần 2 sẽ dài hơn. Trong điều này, tôi nghĩ rằng một chỉ mục trên cả table_1 và table_2 trên date_coll sẽ hữu ích.
Tôi không nghĩ rằng chỉ mục tổng hợp sẽ giúp ích gì cả trong lựa chọn của bạn.
Điều này cho thấy rất khó để chẩn đoán lý do tại sao ba điều kiện kết hợp với nhau sẽ ảnh hưởng xấu đến hiệu suất. Nó dường như liên quan đến việc phân phối dữ liệu của bạn. Không chắc về mySql nhưng trong Oracle, bộ sưu tập thống kê trên các bảng đó sẽ tạo ra sự khác biệt.
Hy vọng nó sẽ hữu ích.