2011-06-30 30 views
6

MySQL dường như không sử dụng các chỉ mục và đang sử dụng filesort trên truy vấn sau đây:MySQL không sử dụng các chỉ mục; sử dụng filesort

SELECT `tweets`.* 
    FROM `tweets` 
    WHERE (`tweets`.contest_id = 159) 
ORDER BY tweet_id ASC, tweeted_at DESC LIMIT 100 OFFSET 0 

Tôi có chỉ số về contest_id, tweet_id và tweeted_at

Khi tôi thực hiện EXPLAIN EXTENDED, lợi nhuận Extra "Sử dụng ở đâu ; sử dụng filesort ". Làm cách nào để cải thiện truy vấn của tôi?

+0

Bạn có một chỉ mục duy nhất bao gồm 'contest_id, tweet_id, tweeted_at'? hoặc chúng có nhiều chỉ mục cột đơn không? –

Trả lời

5

Khi bạn trộn ASCDESC sắp xếp, MySQL không thể sử dụng chỉ mục để tối ưu hóa câu lệnh GROUP BY.

Ngoài ra, việc sử dụng nhiều phím để sắp xếp sẽ dẫn đến việc không thể tối ưu hóa truy vấn bằng chỉ mục.

Từ các tài liệu:

http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html

Trong một số trường hợp, MySQL không thể sử dụng chỉ số để giải quyết ORDER BY, mặc dù nó vẫn sử dụng chỉ số để tìm các hàng phù hợp với mệnh đề WHERE . Những trường hợp này bao gồm:

Bạn sử dụng ORDER BY trên phím khác nhau:

SELECT * FROM t1 ORDER BY key1, key2;

...

Bạn trộn ASC và DESC:

SELECT * FROM t1 ORDER BY key_part1 DESC, ASC key_part2;

Nếu hai cột bạn đang đặt hàng không nằm trong cùng một khóa, thì bạn đang thực hiện cả hai điều trên.

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