Tôi muốn tối ưu hóa truy vấn bằng cách sử dụng liên kết làm truy vấn phụ. Im không thực sự chắc chắn làm thế nào để xây dựng các truy vấn mặc dù. Tôi đang sử dụng MYSQL 5Liên minh dưới dạng truy vấn phụ MySQL
Đây là truy vấn ban đầu:
SELECT Parts.id
FROM Parts_Category, Parts
LEFT JOIN Image ON Parts.image_id = Image.id
WHERE
(
(
Parts_Category.category_id = '508' OR
Parts_Category.main_category_id ='508'
) AND
Parts.id = Parts_Category.Parts_id
) AND
Parts.status = 'A'
GROUP BY
Parts.id
Những gì tôi muốn làm là thay thế ((Parts_Category.category_id = '508' OR Parts_Category.main_category_id ='508')
phần này với sự kết hợp dưới đây. Bằng cách này tôi có thể thả mệnh đề GROUP BY và sử dụng các chỉ mục col thẳng để cải thiện hiệu suất. Các bảng phân loại các bộ phận và phụ tùng chứa nửa triệu bản ghi, vì vậy mọi lợi ích sẽ là tuyệt vời.
(
SELECT * FROM
(
(SELECT Parts_id FROM Parts_Category WHERE category_id = '508')
UNION
(SELECT Parts_id FROM Parts_Category WHERE main_category_id = '508')
)
as Parts_id
)
Ai có thể cho tôi manh mối về cách viết lại không? Tôi đã cố gắng hàng giờ nhưng không thể có được nó vì tôi chỉ khá mới với MySQL.
Nhờ bao giờ rất nhiều Quassnoi. FY1 trên một danh mục hàng 62.000 truy vấn trả về khoảng 1 giây nhanh hơn! – gus
Tôi nghĩ rằng trong ví dụ thứ hai của bạn tôi sẽ phải thêm một GROUP BY Parts.id như tôi không muốn các bản sao mà một phần có thể được liệt kê trong các thể loại khác. Đó là ý tưởng đằng sau việc sử dụng Union. Tôi sẽ so sánh hiệu suất anyway. Cảm ơn một lần nữa. – gus
GROUP BY là cần thiết trong ví dụ thứ hai và nếu thêm tôi nhận được cùng một vấn đề - filesort và sử dụng temp từ giải thích. – gus