Mẹo chuyên nghiệp Tránh SELECT *
hoặc SELECT table.*
trong các truy vấn nhạy cảm với hiệu suất. Thay vào đó, hãy chọn, theo tên, các cột bạn thực sự cần sử dụng
Mẹo chuyên nghiệp MySQL có một phần mở rộng không chuẩn nổi tiếng là GROUP BY
mà bạn đang sử dụng và có thể sử dụng sai. Đọc này. https://dev.mysql.com/doc /refman/8.0/en/group-by-handling.html
Nếu bạn đã làm theo mẹo chuyên nghiệp đầu tiên, thì việc làm theo mẹo thứ hai sẽ dễ dàng hơn nhiều.
Mẹo chuyên nghiệp Tránh "ném vào" nhiều chỉ mục cột đơn với hy vọng đẩy nhanh các truy vấn của bạn. Thay vào đó, hãy tạo các chỉ mục, thường là các chỉ mục ghép, phù hợp với nhu cầu của truy vấn thực tế của bạn. Đọc https://use-the-index-luke.com này .
Mẹo chuyên nghiệp Using temporary; using filesort
xuất hiện trong đầu ra EXPLAIN không nhất thiết là xấu. Nó chỉ đơn giản có nghĩa là công cụ truy vấn phải lưu vào bộ nhớ cache một phần kết quả trước khi trả về. temporary
thứ không phải là một bảng thực tế, nó là một cấu trúc RAM. Nếu nó quá lớn, nó sẽ chiếm dụng RAM, MySQL sẽ tràn nó ra đĩa. Nhưng của bạn thì không.
Tất cả những gì đang được nói, hãy cấu trúc lại truy vấn của bạn. Tôi đoán bạn muốn truy xuất các hàng có idCartDATA
lớn nhất giá trị cho mỗi CartSplitData.SUPPLIERID
.
Vì vậy, hãy viết nó dưới dạng một truy vấn con.
SELECT max(IDCartDATA) AS IDCartDATA, SUPPLIERID
FROM CartSplitData
GROUP BY SUPPLIERID
Truy vấn này có thể được đẩy nhanh đáng kể, bằng cách đặt một chỉ mục kết hợp trên CartSplitData:(SUPPLIERID, IDCartDATA)
.
Tiếp theo, hãy viết lại truy vấn chính của bạn để tìm các hàng khớp với id trong truy vấn con đó.
SELECT CartData.* /* * hammers performance */
CartSplitData.* /* * hammers performance */
FROM CartData
JOIN CartSplitData ON CartSplitData.IDCartDATA = CartDATA.IDCartData
JOIN (
SELECT max(IDCartDATA) AS IDCartDATA, SUPPLIERID
FROM CartSplitData
GROUP BY SUPPLIERID
)x ON x.SUPPLIERID = CartSplitData.SUPPLIERID
AND x.IDCartData = CartSplitData.IDCartData
WHERE CartData.CartOrderref = 'XXXXXXXXX'
Chỉ mục của bạn trên CartData.CartOrderref
sẽ giúp ích cho truy vấn bên ngoài này, cũng như chỉ mục kết hợp được tạo ^^^.