Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server 2008:Sắp xếp theo ngày giờ quá chậm

Đặ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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao Lỗi:[Trình quản lý Trình điều khiển ODBC] Không tìm thấy tên nguồn dữ liệu ...? (hoạt động tốt trên môi trường nhà phát triển)

  2. Phạm vi biến SQL Server trong một thủ tục được lưu trữ

  3. Kết hợp cột varchar với cột int

  4. Tổng hợp có thể không xuất hiện trong danh sách tập hợp của một tuyên bố CẬP NHẬT

  5. Dịch vụ không hiển thị trong Trình quản lý cấu hình SQL Server