Khóa chính so với chỉ số duy nhất: hiệu suất khác biệt với khóa ngoại?


7

Sẽ có bất kỳ sự khác biệt nào về hiệu suất nếu bạn so sánh một truy vấn tìm nạp dữ liệu thông qua liên kết giữa hai bảng trong đó có mối quan hệ với một trong hai điều sau đây:

  • Khóa chính
  • Một chỉ mục duy nhất

2
Không nên không có, câu hỏi gần đây khẳng định là có nhưng tôi chưa bao giờ thấy bất cứ điều gì như vậy và hơi nghi ngờ ...
Martin Smith

Có thể có nếu bạn chưa chỉ định cả hai hoặc phân cụm hoặc không độc quyền. Nếu cả hai được nhóm hoặc không được bao gồm thì không nên có bất kỳ khác biệt.
Gulli Meel

Câu trả lời:


4

Nó không có gì để làm với hiệu suất như vậy, nhưng nó là một vấn đề khái niệm.

Sử dụng CONSTRAINT ĐỘC ĐÁO để nêu thực tế. Ví dụ, sử dụng UNIQUE INDEX khi bạn có một chỉ mục duy nhất là duy nhất bởi vì bạn thêm khóa chính cho nó.

Theo kịch bản:

Khóa chính

  • Khi bạn muốn giữ một định danh cho mỗi hàng. Vì vậy, mỗi hàng có thể được xác định theo giá trị Khóa. (Vì pk là duy nhất và không null)

Khóa duy nhất

  • Khi bạn muốn giữ định danh phụ, nơi đã tồn tại chính trong cùng một bảng. Vì vậy, mỗi hàng có thể được lấy bởi PK hoặc UK của bạn. Unique sẽ cho phép null nhưng chỉ một lần (sử dụng để cho phép null đơn).

Ghi chú:

Cả hai có thể được nhóm hoặc không cụm. Khi bạn tạo một ràng buộc, bạn được phép chọn loại chỉ mục bạn muốn sử dụng cho các khóa này.

Nguồn:

http://social.msdn.microsoft.com/Forums/en/transactsql/thread/290619be-b892-4f52-99e0-d8e2ff80aec4

http://bytes.com/topic/sql-server/answers/83999-unique-constraint-vs-unique-index-ms-sql-2000-a


vâng xin lỗi vì điều tồi tệ đó: /

3

Tôi không chắc câu hỏi của bạn có đủ thông tin để đưa ra câu trả lời hay không. Việc PK / UI được phân cụm hay không phân cụm thường là yếu tố hiệu suất vượt trội khi tham gia kết quả bao gồm các trường không phải là một phần của các chỉ mục .

Có thể chỉ có một chỉ mục được nhóm trên một bảng tại một thời điểm. Theo mặc định, PK được nhóm. Tuy nhiên, nếu một chỉ mục được nhóm tồn tại trước khi PK được tạo thì PK sẽ không bị tách rời (không bình thường).

Vì vậy, trong hầu hết các trường hợp, vì UI sẽ được tạo sau PK, nên UI sẽ không được phân cụm và do đó chậm hơn khi kết quả tham gia cần bao gồm các trường không có chỉ mục từ hàng. So sánh, nếu một giao diện người dùng được tạo thay vì PK thì hiệu suất được dự kiến ​​sẽ tương đương với một cụm được phân cụm.

Cũng có thể tạo các chỉ mục với các cột "bao gồm". Điều này xoay quanh vấn đề phân cụm vì nó cho phép kết quả tham gia sử dụng các cột được bao gồm mà không phải tìm nạp vật lý (vì hàng nằm ở một vị trí khác khi không được phân cụm).

Chỉ số cụm

Chỉ mục

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.