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

SQL Server heap v.s. chỉ mục nhóm

Lưu trữ đống không liên quan gì đến những đống này .

Heap chỉ có nghĩa là bản thân các bản ghi không được sắp xếp theo thứ tự (i. E. Không được liên kết với nhau).

Khi bạn chèn một bản ghi, bản ghi sẽ chỉ được chèn vào không gian trống mà cơ sở dữ liệu tìm thấy.

Cập nhật một hàng trong bảng dựa trên heap không ảnh hưởng đến các bản ghi khác (mặc dù nó ảnh hưởng đến các chỉ mục phụ)

Nếu bạn tạo chỉ mục phụ trên HEAP bảng, RID (một loại con trỏ vật lý tới không gian lưu trữ) được sử dụng làm con trỏ hàng.

Chỉ mục được phân cụm có nghĩa là các bản ghi là một phần của B-Tree . Khi bạn chèn một bản ghi, B-Tree cần được liên kết lại.

Việc cập nhật một hàng trong một bảng được nhóm lại khiến B-Tree liên kết lại, i. e. cập nhật con trỏ nội bộ trong các bản ghi khác.

Nếu bạn tạo chỉ mục phụ trên bảng được phân nhóm, giá trị của khóa chỉ mục được phân nhóm sẽ được sử dụng làm con trỏ hàng.

Điều này có nghĩa là một chỉ mục được phân nhóm phải là duy nhất. Nếu một chỉ mục được phân nhóm không phải là duy nhất, một cột ẩn đặc biệt được gọi là uniquifier được nối vào khóa chỉ mục tạo nếu là duy nhất (và có kích thước lớn hơn).

Cũng cần lưu ý rằng việc tạo chỉ mục phụ trên một cột làm cho các giá trị hoặc khóa của chỉ mục được phân nhóm trở thành một phần của khóa của chỉ mục thứ hai.

Bằng cách tạo chỉ mục trên bảng được phân nhóm, trên thực tế, bạn luôn nhận được chỉ mục tổng hợp

CREATE UNIQUE CLUSTERED INDEX CX_mytable_1234 (col1, col2, col3, col4)

CREATE INDEX IX_mytable_5678 (col5, col6, col7, col8)

Chỉ mục IX_mytable_5678 thực tế là một chỉ mục trên các cột sau:

col5
col6
col7
col8
col1
col2
col3
col4

Điều này có một tác dụng phụ nữa:

Một DESC điều kiện trong chỉ mục một cột trên một bảng được phân nhóm có ý nghĩa trong SQL Server

Chỉ số này:

CREATE INDEX IX_mytable ON mytable (col1)

có thể được sử dụng trong một truy vấn như sau:

SELECT  TOP 100 *
FROM    mytable
ORDER BY
       col1, id

, trong khi cái này:

CREATE INDEX IX_mytable ON mytable (col1 DESC)

có thể được sử dụng trong một truy vấn như sau:

SELECT  TOP 100 *
FROM    mytable
ORDER BY
       col1, id DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cấu hình theo phạm vi cơ sở dữ liệu SQL Server và sửa kế hoạch tự động

  2. SQL Server 2005 Làm thế nào để tạo ra một ràng buộc duy nhất?

  3. SQL Server:Lỗi liên kết giao tiếp SSL yêu cầu (không nhận được gói)

  4. Các tham số đầu ra của thủ tục được lưu trữ trong SQL Server Profiler

  5. Câu lệnh SQL MERGE để cập nhật dữ liệu