Tôi sẽ thử những cách sau:
Đầu tiên, hãy đảm bảo có các chỉ mục trên các bảng và cột sau (mỗi nhóm cột trong ngoặc đơn phải là một chỉ mục riêng biệt):
table1 : (subscribe, CDate)
(CU_id)
table2 : (O_cid)
(O_ref)
table3 : (I_oref)
(I_pid)
table4 : (P_id)
(P_cat)
table5 : (C_id, store)
Thứ hai, nếu việc thêm các chỉ mục ở trên không cải thiện mọi thứ nhiều như bạn muốn, hãy thử viết lại truy vấn dưới dạng
SELECT DISTINCT t1.first_name, t1.last_name, t1.email FROM
(SELECT CU_id, t1.first_name, t1.last_name, t1.email
FROM table1
WHERE subscribe = 1 AND
CDate >= $startDate AND
CDate <= $endDate) AS t1
INNER JOIN table2 AS t2
ON t1.CU_id = t2.O_cid
INNER JOIN table3 AS t3
ON t2.O_ref = t3.I_oref
INNER JOIN table4 AS t4
ON t3.I_pid = t4.P_id
INNER JOIN (SELECT C_id FROM table5 WHERE store = 2) AS t5
ON t4.P_cat = t5.C_id
Tôi hy vọng ở đây rằng lựa chọn phụ đầu tiên sẽ giảm đáng kể số hàng được xem xét để tham gia, hy vọng rằng các phép nối tiếp theo sẽ hoạt động ít hơn. Tìm hiểu lý do đằng sau lựa chọn phụ thứ hai trên bảng5.
Trong mọi trường hợp, hãy gây rối với nó. Ý tôi là, cuối cùng nó chỉ là một LỰA CHỌN - bạn thực sự không thể làm tổn hại bất cứ điều gì với nó. Kiểm tra các kế hoạch được tạo ra bởi mỗi hoán vị khác nhau và cố gắng tìm ra điều gì tốt hoặc xấu về mỗi phương án.
Chia sẻ và tận hưởng.