Tại sao Chỉ số cụm trên Khóa chính bắt buộc?


7

Tại sao ràng buộc Khóa chính tạo Chỉ mục cụm trên cột PK theo mặc định?

Chúng ta có thể tạo một bảng có khóa chính, nhưng KHÔNG có chỉ mục cụm. Tôi cần ràng buộc PK để duy trì các giá trị duy nhất + không null trên cột, nhưng tôi không muốn một chỉ mục được nhóm vì có quá nhiều chèn trong bảng này.

Tôi đã đọc được rằng có chỉ số cụm có tác động hiệu suất đến các phần chèn.

Câu trả lời:


7

Tại sao ràng buộc Khóa chính tạo Chỉ mục cụm trên cột PK theo mặc định?

Đó là những gì các lập trình viên MS-SQL-Server quyết định mặc định là. Một chỉ mục được phân cụm tốt là một chỉ số có các giá trị duy nhất (như Khóa chính), hẹp (vì hầu hết các khóa chính là hoặc ít nhất là phải như vậy) và không ngừng tăng lên. Vì vậy, hầu hết các lần, khóa chính là một lựa chọn tốt (hoặc tốt nhất) cho khóa được phân cụm (có thể có nhiều nhất một khóa được phân cụm cho mỗi bảng).

Chúng ta có thể tạo một bảng có khóa chính, nhưng KHÔNG có chỉ mục cụm?

Vâng, bạn có thể. Bằng cách xác định rõ ràng tất cả các chỉ số và đặc biệt là khóa chính là không phân cụm. Nếu bạn nghĩ rằng bạn không cần khóa cụm trên bảng, bạn có thể làm điều đó và có khóa chính là không phân cụm. Các ràng buộc duy nhất và không null sẽ vẫn được thực thi.


3

Bạn có thể đồng ý xác định PK rõ ràng là NonClustered và sẽ không như vậy.

Nếu bạn không nói gì, và đã không có một chỉ mục được nhóm, thì PK sẽ được tạo theo cụm theo mặc định.


2

Nếu khóa chính được nhóm của bạn là tuần tự, thì việc chèn vào cuối không phải là vấn đề. Chỉ khi bạn chèn một bản ghi trong đó giá trị khóa chính nằm ở giữa các giá trị hiện có. Điều này sẽ sắp xếp lại dữ liệu nếu khóa chính được nhóm.

Nếu bạn chọn không sử dụng khóa chính được phân cụm, vẫn có thể xảy ra sự cố về hiệu suất nếu dữ liệu của khóa chính bị chia tách trên các trang cơ sở dữ liệu. Bạn nên xem xét hệ số lấp đầy và đảm bảo rằng nó đủ lớn để xử lý các phần chèn ở giữa chỉ mục mà không bị phân mảnh trang.

Dưới đây là một vài tài liệu tham khảo tốt:


0

Bạn có thể sử dụng một điều khoản trên bảng để duy trì các ràng buộc bạn muốn.

Bạn có thể tạo một chỉ mục duy nhất trên cột.

Tuy nhiên, tôi không quen với các vấn đề hiệu suất với các khóa chính. Nếu bạn có khóa chính tăng tự động (danh tính) và chỉ chèn các hàng ở cuối, thì hiệu suất không phải là vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.