Truy vấn sau hoạt động, nhưng nó rất chậm cho 10 bản ghi (2 giây). Các profiling nói rằng nó tạo ra một bảng tmp, nhưng tôi không chắc chắn lý do tại sao. Về cơ bản, tôi đang tham gia người dùng hiện tại, vào các nhóm ACL, để có được tất cả các nhóm họ đang ở, sau đó tham gia các nhóm với các công ty, để có được tất cả các công ty họ đang có, sau đó tham gia các công ty để các đơn đặt hàng , để có được tất cả các đơn đặt hàng ..MySQL - Cách truy vấn này có thể được tối ưu hóa?
Nếu tôi loại bỏ dòng này
ORDER BY orders.created_on DESC
sau đó truy vấn thực hiện trong 0,06 giây (hơn sau đó chấp nhận được) ..
trợ giúp, bất kỳ ý tưởng về làm thế nào để tối ưu hóa ? Cảm ơn nhiều :)
SELECT
orders.uuid,
companies.name as company_name
FROM
users u
JOIN
users_acl_groups g on u.uuid = g.user_uuid
JOIN
users_acl acl on (acl.user_uuid = u.uuid or acl.group_uuid = g.group_uuid)
JOIN
companies on acl.item_uuid = companies.uuid
JOIN
orders on companies.uuid = orders.company_uuid
WHERE
u.uuid = 'DDEC8073-5056-C000-01ED583A51CBCA32' and orders.status <> ''
ORDER BY orders.created_on DESC
limit 0, 10;
UPDATE, những giải thích của truy vấn ..
lệnh1 ĐƠN GIẢN TẤT CẢ 9403 Sử dụng tạm thời; Sử dụng filesort
1 SIMPLE acl TẤT CẢ 1859 Sử dụng vị trí; Sử dụng bộ đệm nối
1 SIMPLE g ALL 2005 Sử dụng vị trí; Sử dụng tham gia đệm
1 công ty SIMPLE eq_ref TIỂU TIỂU 52 table.orders.company_uuid 1
1 SIMPLE u ALL 33.595 Sử dụng ở đâu; Đặc biệt; Sử dụng bộ đệm nối
Đã sửa đổi tiêu đề của bạn, khi đoán rằng bạn phải trả một khoản tiền thấp do âm điệu bắt buộc và đòi hỏi khi câu hỏi của bạn được diễn đạt độc đáo. –
Thử sử dụng cùng một truy vấn với tham gia được áp dụng trên bất kỳ cột nào khác ngoài UID. Hãy thử làm điều đó với int, float, string, UID và thông báo thời gian. Hãy cho chúng tôi biết nếu bạn tìm thấy bất kỳ biến thể nào. –
Bạn có chỉ mục trên orders.created_on không? Hiển thị đầu ra trên 'EXPLAIN' trên truy vấn của bạn. Có lẽ bạn có thể hưởng lợi từ các chỉ mục khác. 'GIẢI THÍCH' nào sẽ cho chúng ta biết. – nos