Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để tăng tốc truy vấn MySQL với nhiều phép nối

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra lỗi truy vấn codeigniter thay vì hiển thị chúng cho người dùng

  2. Cách xóa khoảng trắng khỏi chuỗi trong MySQL

  3. Laravel - Tạo bảng động (không di chuyển)

  4. So sánh điểm tương đồng giữa hai tập kết quả

  5. Làm cách nào để thay đổi một cột và thay đổi giá trị mặc định?