Sắp xếp theo cột có nên lập chỉ mục hay không?


35

Tôi đã thêm các chỉ mục vào bảng được sử dụng cho kết quả tìm kiếm. Tôi đang hiển thị kết quả theo thứ tự ASC hoặc DESC. Vậy cột đó có nên có chỉ số hay không? Tôi có thêm 2 chỉ số trên bảng đó. Hiệu suất sẽ ảnh hưởng như thế nào bằng cách tạo hoặc không tạo chỉ mục cho cột đó?


2
Vui lòng gửi truy vấn
RolandoMySQLDBA

Câu trả lời:


26

Có, MySQL có thể sử dụng một chỉ mục trên các cột trong ORDER BY (trong các điều kiện nhất định). Tuy nhiên, MySQL không thể sử dụng một chỉ mục cho thứ tự hỗn hợp ASC, DESC theo ( SELECT * FROM foo ORDER BY bar ASC, pants DESC). Chia sẻ truy vấn của bạn và câu lệnh CREATE TABLE sẽ giúp chúng tôi trả lời câu hỏi của bạn cụ thể hơn.

Để biết gợi ý về cách tối ưu hóa ĐẶT HÀNG theo mệnh đề: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

Chỉnh sửa 2012-01-21 8:53 sáng

Có những câu hỏi về nguồn gốc của tuyên bố của tôi về việc sử dụng một chỉ mục với ASC / DESC hỗn hợp trong ORDER BY. Từ tài liệu ORDER BY Tối ưu hóa :

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

...

Bạn trộn ASC và DESC:

CHỌN * TỪ T1 ĐẶT HÀNG THEO key_part1 DESC, key_part2 ASC;

...

Ngoài ra, từ khóa DESC là vô nghĩa trong CREATE INDEX

Một đặc tả index_col_name có thể kết thúc bằng ASC hoặc DESC. Những từ khóa này được phép cho các tiện ích mở rộng trong tương lai để chỉ định lưu trữ giá trị chỉ mục tăng dần hoặc giảm dần. Hiện tại, chúng được phân tích cú pháp nhưng bỏ qua; giá trị chỉ mục luôn được lưu trữ theo thứ tự tăng dần.


3
"MySQL không thể sử dụng một chỉ mục cho hỗn hợp ASC, DESC" . Tham khảo cho điều này?
ypercubeᵀᴹ

CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);nên làm việc.
Frank Heikens

Nguồn của tôi là tài liệu mysql được liên kết trong câu trả lời của tôi. Tìm kiếm "hỗn hợp."
Aaron Brown

3
MySQL phân tích cú pháp asc & Desc trong CREATE INDEX, nhưng bỏ qua chúng. Các chỉ mục luôn được lưu trữ theo thứ tự tăng dần. dev.mysql.com/doc/refman/5.5/en/create-index.html
Aaron Brown

1
Mới với MySQL 8.0 : Bây giờ nó có thể sử dụng một hỗn hợp của ASCDESC nếu các INDEXcó hỗn hợp tương tự.
Rick James

4

Đối với bất kỳ ai thắc mắc về câu trả lời vì nó liên quan đến PostgreSQL, câu trả lời là có, một chỉ mục sẽ được sử dụng. Theo tài liệu PostgreQuery, trình hoạch định truy vấn "sẽ xem xét việc đáp ứng một đặc tả ORDER BY bằng cách quét một chỉ mục có sẵn phù hợp với đặc tả hoặc bằng cách quét bảng theo thứ tự vật lý và thực hiện sắp xếp rõ ràng." Điều này có nghĩa là nếu có một chỉ mục mà trình hoạch định có thể sử dụng thì nó sẽ quay trở lại để thực hiện sắp xếp sau khi lấy các hàng khớp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.