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

Các chỉ mục của SQL Server - tăng dần hoặc giảm dần, nó tạo ra sự khác biệt gì?

Điều này chủ yếu quan trọng khi được sử dụng với các chỉ mục tổng hợp:

CREATE INDEX ix_index ON mytable (col1, col2 DESC);

có thể được sử dụng cho một trong hai:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2 DESC

hoặc:

SELECT  *
FROM    mytable
ORDER BY
        col1 DESC, col2

, nhưng không dành cho:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2

Chỉ mục trên một cột có thể được sử dụng hiệu quả để sắp xếp theo cả hai cách.

Xem bài viết trong blog của tôi để biết chi tiết:

  • Chỉ mục giảm dần

Cập nhật:

Trên thực tế, điều này có thể quan trọng ngay cả đối với một chỉ mục cột, mặc dù nó không quá rõ ràng.

Hãy tưởng tượng một chỉ mục trên một cột của bảng nhóm:

CREATE TABLE mytable (
       pk INT NOT NULL PRIMARY KEY,
       col1 INT NOT NULL
)
CREATE INDEX ix_mytable_col1 ON mytable (col1)

Chỉ mục trên col1 giữ các giá trị có thứ tự của col1 cùng với các tham chiếu đến các hàng.

Vì bảng được phân nhóm nên các tham chiếu đến các hàng thực sự là giá trị của pk . Chúng cũng được sắp xếp theo từng giá trị của col1 .

Điều này có nghĩa là các lá của chỉ mục thực sự được sắp xếp trên (col1, pk) và truy vấn này:

SELECT  col1, pk
FROM    mytable
ORDER BY
        col1, pk

không cần phân loại.

Nếu chúng ta tạo chỉ mục như sau:

CREATE INDEX ix_mytable_col1_desc ON mytable (col1 DESC)

, sau đó là các giá trị của col1 sẽ được sắp xếp giảm dần, nhưng các giá trị của pk trong mỗi giá trị của col1 sẽ được sắp xếp tăng dần.

Điều này có nghĩa là truy vấn sau:

SELECT  col1, pk
FROM    mytable
ORDER BY
        col1, pk DESC

có thể được phục vụ bởi ix_mytable_col1_desc nhưng không phải bởi ix_mytable_col1 .

Nói cách khác, các cột tạo thành một CLUSTERED INDEX trên bất kỳ bảng nào luôn là các cột theo sau của bất kỳ chỉ mục nào khác trên bảng đó.



  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ạo một cột được tính toán sử dụng dữ liệu từ một bảng khác trong SQL Server

  2. Chia phạm vi ngày thành một hàng mỗi tháng trong máy chủ sql

  3. Không thể giải quyết xung đột đối chiếu giữa SQL_Latin1_General_CP1_CI_AS và Latin1_General_CI_AS trong hoạt động ngang nhau

  4. Chức năng định dạng ngày của SQL Server

  5. SQL - Thủ tục lưu trữ cuộc gọi cho mỗi bản ghi