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

Chỉ mục SQL Server nên được phân cụm?

Frederik đã tổng kết nó một cách độc đáo, và đó thực sự là những gì Kimberly Tripp cũng giảng:khóa phân cụm phải ổn định (không bao giờ thay đổi), ngày càng tăng (IDENTITY INT), nhỏ và duy nhất.

Trong trường hợp của bạn, tôi muốn đặt khóa phân cụm trên cột BIGINT hơn là cột VARCHAR (80).

Trước hết, với cột BIGINT, thật dễ dàng để thực thi tính duy nhất (nếu bạn không tự mình thực thi và đảm bảo tính duy nhất, SQL Server sẽ thêm một "mã duy nhất" 4 byte vào mỗi hàng của bạn) và nó RẤT NHIỀU trung bình nhỏ hơn VARCHAR (80).

Tại sao kích thước lại quan trọng như vậy? Khóa phân cụm cũng sẽ được thêm vào MỖI và mọi chỉ mục không phân cụm của bạn - vì vậy nếu bạn có nhiều hàng và nhiều chỉ mục không phân cụm, việc có 40-80 byte so với 8 byte có thể nhanh chóng tạo ra một LỚN Sự khác biệt.

Ngoài ra, một mẹo hiệu suất khác:để tránh cái gọi là tra cứu dấu trang (từ một giá trị trong chỉ mục không phân cụm của bạn thông qua khóa phân cụm vào các trang dữ liệu thực tế), SQL Server 2005 đã đưa ra khái niệm "cột được bao gồm" trong các chỉ mục không phân cụm của bạn. Đó là những điều cực kỳ hữu ích và thường bị bỏ qua. Nếu các truy vấn của bạn thường yêu cầu các trường chỉ mục cộng với chỉ một hoặc hai trường khác từ cơ sở dữ liệu, hãy cân nhắc bao gồm các trường đó để đạt được cái được gọi là "bao gồm các chỉ mục". Một lần nữa - hãy xem bài viết xuất sắc của Kimberly Tripp - cô ấy là Nữ thần lập chỉ mục của máy chủ SQL! :-) và cô ấy có thể giải thích điều đó tốt hơn nhiều so với những gì tôi có thể ...

Tóm lại:hãy đặt khóa phân cụm của bạn trên một cột nhỏ, ổn định, duy nhất - và bạn sẽ làm tốt thôi!

Marc



  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 tệp nhật ký (* .LDF) trong SQL Server 2008

  2. Lỗi:Không thể sử dụng chế độ xem hoặc chức năng do lỗi liên kết

  3. Ảnh hưởng đến ứng dụng khi di chuyển từ máy chủ sql 2005 sang 2008

  4. TABLESAMPLE trả về số hàng sai?

  5. SQL Server:TẠO LẮP RÁP cho lắp ráp 'Kiểm tra' không thành công vì lắp ráp 'Kiểm tra' không đúng định dạng hoặc không phải là một lắp ráp .NET thuần túy.