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

Làm cách nào để một chỉ mục Không phân cụm có thể xuất ra một cột không được bao gồm trong chỉ mục

Nếu bản thân bảng là được nhóm , sau đó tất cả các chỉ mục phụ chứa một bản sao của khóa phân cụm (khóa xác định thứ tự vật lý của các hàng trong bảng được phân nhóm).

Lý do:các hàng trong bảng được phân nhóm được lưu trữ vật lý trong cây B (không phải bảng heap) và do đó có thể di chuyển khi các nút của cây B bị tách hoặc liên kết lại, do đó chỉ mục phụ không thể chỉ chứa "con trỏ" hàng (vì nó sẽ có nguy cơ "treo lơ lửng" sau khi hàng di chuyển).

Thông thường, điều đó có ảnh hưởng bất lợi đến hiệu suất - truy vấn thông qua chỉ mục phụ có thể yêu cầu tra cứu kỹ lưỡng :

  • Đầu tiên, hãy tìm kiếm chỉ mục phụ và lấy khóa phân nhóm.
  • Thứ hai, dựa trên khóa phân cụm được truy xuất ở trên, hãy tìm kiếm chính bảng được phân nhóm (là B-tree).

Tuy nhiên, nếu tất cả những gì bạn muốn là các trường của khóa phân cụm, thì chỉ cần tra cứu đầu tiên.

Aka "chỉ mục theo nhóm" trong MS SQL Server.

Thông thường, nhưng không nhất thiết phải là KHÓA CHÍNH trong MS SQL Server.

Thật không may là tính năng phân cụm được bật theo mặc định trong MS SQL Server - mọi người thường chỉ để mặc định mà không xem xét đầy đủ các ảnh hưởng của nó. Khi phân cụm không phù hợp, bạn nên chỉ định từ khóa KHÔNG CHỈNH SỬA một cách rõ ràng để tắt tính năng 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. Cách bỏ qua một tham số trong thủ tục được lưu trữ nếu giá trị của nó là null

  2. chọn cột trên cùng 1 với cột 2 phù hợp

  3. sp_dropserver và sp_addserver không hoạt động

  4. Tổng hợp dữ liệu trong T-SQL

  5. SQL Server OFFSET tương đương