2008-09-24 35 views
10

Nếu tôi có một truy vấn như thế nào,Chỉ mục < or > Truy vấn MySQL có phải là chỉ mục không?

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00' 

không có datetime_field cột lập chỉ mục giúp đỡ? tức là chỉ mục chỉ hữu ích khi sử dụng thử nghiệm bình đẳng (hoặc bất bình đẳng), hoặc nó có hữu ích khi thực hiện so sánh theo thứ tự không?

(Gợi ý để thực hiện tốt hơn truy vấn này, mà không tái tạo bảng, cũng sẽ là ok!)

Trả lời

11

Có thể. Nói chung, nếu có một chỉ mục như vậy, nó sẽ sử dụng quét phạm vi trên chỉ mục đó nếu không có chỉ mục "tốt hơn" trên truy vấn. Tuy nhiên, nếu người tối ưu hóa quyết định rằng phạm vi sẽ kết thúc quá lớn (tức là bao gồm nhiều hơn, nói 1/3 số hàng), nó có thể sẽ không sử dụng chỉ mục chút nào, vì việc quét bảng có thể sẽ nhanh hơn.

Sử dụng GIẢI THÍCH (trên CHỌN; bạn không thể GIẢI THÍCH xóa) để xác định quyết định của nó trong trường hợp cụ thể. Điều này có thể phụ thuộc vào

  • Có bao nhiêu hàng có trong bảng
  • gì phạm vi là bạn đang xác định
  • gì khác được quy định trong mệnh đề WHERE. Nó sẽ không sử dụng quét phạm vi của một chỉ mục nếu có một chỉ mục khác "trông đẹp hơn".
+2

Có lẽ đây phải là một câu hỏi bổ sung, nhưng là có một câu trả lời đơn giản (hoặc tham chiếu đến một phần của tài liệu MySQL) giải thích cách optimizer ra quyết định về phạm vi quá lớn? Trường hợp cụ thể không có gì khác trong WHERE. –

1

Nó hiện, kiểm tra với một MÔ TẢ chọn từ bảng ...

2

Một chỉ số trên trường datetime chắc chắn sẽ giúp với các tìm kiếm dựa trên phạm vi ngày. Chúng tôi sử dụng chúng tất cả thời gian trong cơ sở dữ liệu của chúng tôi và các truy vấn được làm chậm một cách nhanh chóng mà không có các chỉ mục.

4

Từ MySQL Reference manual:

Một chỉ số B-cây có thể được sử dụng để so sánh cột trong biểu thức sử dụng =,>,> =, <, < =, hoặc GIỮA nhà khai thác.

Đối với một số lượng lớn hàng, bạn có thể tra cứu nhanh hơn các hàng thông qua chỉ mục cây thông qua quét bảng. Nhưng như các câu trả lời khác chỉ ra, sử dụng EXPLAIN để tìm ra quyết định của MySQL.

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