Tôi có tuyên bố SELECT
mà tôi muốn tối ưu hóa. mysql - order by optimization nói rằng trong một số trường hợp, chỉ mục không thể được sử dụng để tối ưu hóa ORDER BY
. Cụ thể điểm:Việc tối ưu hóa ORDER BY có hiệu lực trong câu lệnh SELECT sau đây không?
Bạn sử dụng ORDER BY trên các bộ phận không liên tiếp của một phím
SELECT * FROM t1 ĐÂU khóa2 = hằng ORDER BY key_part2;
làm cho tôi suy nghĩ, điều này có thể đúng. Tôi đang sử dụng các chỉ số sau:
UNIQUE KEY `met_value_index1` (`RTU_NB`,`DATETIME`,`MP_NB`),
KEY `met_value_index` (`DATETIME`,`RTU_NB`)
Với sau SQL tuyên bố:
SELECT * FROM met_value
WHERE rtu_nb=constant
AND mp_nb=constant
AND datetime BETWEEN constant AND constant
ORDER BY mp_nb, datetime
- Nó sẽ được xóa đủ chỉ số
met_value_index1
và tạo ra nó với mới ra lệnh choRTU_NB
,MP_NB
,DATETIME
? - Tôi có phải đưa RTU_NB vào mệnh đề
ORDER BY
không?
Kết quả: Tôi đã thử những gì @meriton gợi ý và bổ sung các chỉ số
met_value_index2
. Các
SELECT
hoàn thành sau 1,2 giây, trước đó nó hoàn thành sau 5.06 giây. Sau đây không thuộc về câu hỏi nhưng là một lưu ý phụ: Sau khi một số cố gắng khác tôi chuyển động cơ từ MyISAM sang InnoDB - với
rtu_nb, mp_nb, datetime
làm khóa chính - và câu lệnh hoàn thành sau 0,13 giây!
Cảm ơn bạn đã giải thích và gợi ý. Tôi sẽ thử nó và báo cáo kết quả càng sớm càng tốt - hiện tại máy từ xa đã tắt nguồn - và tôi tò mò, điều gì sẽ thay đổi. –