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

Tại sao truy vấn INNER JOIN / ORDER BY mysql này quá chậm?

(Tôi cho rằng bạn muốn nhập ids.customer_id = customer.customer_id chứ không phải customer_ids.customer_id)

Nếu không có ORDER BY, mysql đã lấy 10 id đầu tiên của loại 10 (được lập chỉ mục), tra cứu khách hàng cho họ và đã hoàn tất. (Lưu ý rằng THAM GIA TRÁI ở đây thực sự là THAM GIA BÊN TRONG vì các điều kiện tham gia sẽ chỉ giữ cho các hàng có khớp trong cả hai bảng)

Với ORDER BY mysql có thể đang truy xuất tất cả type =10 khách hàng sau đó sắp xếp họ theo tên để tìm 10 khách hàng đầu tiên.

Bạn có thể tăng tốc độ này bằng cách bất chuẩn hóa bảng khách hàng (sao chép loại vào hồ sơ khách hàng) hoặc tạo bảng ánh xạ để giữ customer_id, name, type tuples. Trong cả hai trường hợp, hãy thêm chỉ mục vào (type, name) . Nếu sử dụng bảng ánh xạ, hãy sử dụng nó để thực hiện liên kết 3 chiều với khách hàng và id.

Nếu loại =10 khá phổ biến, bạn cũng có thể buộc truy vấn đi qua bảng khách hàng theo tên và kiểm tra loại cho từng loại bằng STRAIGHT JOIN. Nó sẽ không nhanh như một chỉ số tổng hợp, nhưng nó sẽ nhanh hơn việc kéo tất cả các kết quả phù hợp lên.

Và như đã đề xuất ở trên, hãy chạy GIẢI THÍCH về truy vấn của bạn để xem kế hoạch truy vấn mà mysql đang sử dụ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. Mã lỗi 1064, trạng thái SQL 42000:Bạn có lỗi trong cú pháp SQL của mình;

  2. Sự cố bộ đệm MySqlDataReader GetBytes ...

  3. SQL LEFT-JOIN trên 2 trường cho MySQL

  4. CHÈN ... CHỌN ... Ở ĐÂU ... TRÊN DUPLICATE ... truy vấn mysql

  5. Cách thực hiện nhiều truy vấn tới SQL