Đặt hàng theo id
có thể sử dụng quét chỉ mục theo cụm trong khi đặt hàng theo datetime
sử dụng sắp xếp hoặc tra cứu chỉ mục.
Cả hai phương pháp này đều chậm hơn so với quét chỉ mục theo cụm.
Nếu bảng của bạn được nhóm bởi id
, về cơ bản nó có nghĩa là nó đã được sắp xếp. Các bản ghi được chứa trong một B+Tree
trong đó có một danh sách được liên kết liên kết các trang trong id
gọi món. Công cụ chỉ nên duyệt qua danh sách được liên kết để lấy các bản ghi được sắp xếp theo id
.
Nếu id
s được chèn theo thứ tự tuần tự, điều này có nghĩa là thứ tự vật lý của các hàng sẽ khớp với thứ tự logic và quá trình quét chỉ mục theo cụm sẽ nhanh hơn.
Nếu bạn muốn các bản ghi của mình được sắp xếp theo datetime
, có hai tùy chọn:
- Lấy tất cả các bản ghi từ bảng và sắp xếp chúng. Sự chậm chạp là điều hiển nhiên.
- Sử dụng chỉ mục trên
datetime
. Chỉ mục được lưu trữ trong một không gian riêng biệt của đĩa, điều này có nghĩa là công cụ cần di chuyển giữa các trang chỉ mục và trang bảng trong một vòng lặp lồng nhau. Nó cũng chậm hơn.
Để cải thiện thứ tự, bạn có thể tạo một chỉ mục bao trùm riêng trên datetime
:
CREATE INDEX ix_mytable_datetime ON mytable (datetime) INCLUDE (field1, field2, …)
và đưa tất cả các cột bạn sử dụng trong truy vấn của mình vào chỉ mục đó.
Chỉ mục này giống như một bản sao ẩn của bảng của bạn nhưng với dữ liệu được sắp xếp theo thứ tự khác.
Điều này sẽ cho phép loại bỏ các tra cứu khóa (vì chỉ mục chứa tất cả dữ liệu) sẽ thực hiện việc sắp xếp theo datetime
nhanh như vậy trên id
.
Cập nhật:
Một bài đăng mới trên blog về vấn đề này: