2013-05-31 32 views
7

Tôi đang tối ưu hóa truy vấn có liên quan đến một số UNION ALL trong hai truy vấn. Cả hai Truy vấn đã được tối ưu hóa và chạy ít hơn một giây riêng biệt. Tuy nhiên, khi tôi thực hiện công đoàn của cả hai, phải mất khoảng 30 giây để tính toán mọi thứ.Làm thế nào để cải thiện hiệu suất MYSQL trên UNION ALL?

tôi sẽ không làm phiền bạn với truy vấn cụ thể, kể từ khi họ được tối ưu hóa khi họ nhận được, Vì vậy, hãy gọi cho họ Optimized_Query_1Optimized_Query_2

Số hàng từ Optimized_Query_1 là khoảng 100K

Số hàng từ Optimized_Query_2 là khoảng 200K

SELECT * FROM (
    Optimized_Query_1 
UNION ALL 
    Optimized_Query_2 
) U 
ORDER BY START_TIME ASC 

tôi yêu cầu cho teh resu lts để được theo thứ tự, nhưng tôi thấy rằng có hoặc không có ORDER BY ở cuối truy vấn mất nhiều thời gian như vậy không nên làm cho không có sự khác biệt.

Dường như UNION ALL tạo bảng tạm thời trong bộ nhớ, từ đó kết quả cuối cùng được đưa ra, có cách nào để giải quyết vấn đề này không?

Cảm ơn

Trả lời

2

Bạn không thể tối ưu hóa UNION ALL. Nó chỉ đơn giản là ngăn xếp hai tập hợp kết quả trên đầu trang của mỗi khác. So với UNION, nơi cần thêm một bước để xóa các trùng lặp, UNION ALL là xếp chồng thẳng của hai tập hợp kết quả. ORDER BY có thể mất thêm thời gian.

Bạn có thể thử tạo một VIEW trong truy vấn này.

+0

Nếu tôi xóa ORDER BY tổng thời gian để tính toán truy vấn chỉ mất nhiều thời gian. Việc tạo VIEW sẽ giúp ích như thế nào? – jonasMcFerreira

+0

@jonasMcFerreira Hãy xem [thảo luận này] (http://dev.mysql.com/doc/refman/5.5/en/create-view.html#c9063) – Kermit

Các vấn đề liên quan