Chú ý: Đây địa chỉ câu trả lời phát triển doanh nghiệp-lớp in-the-lớn .
Đây là một vấn đề RDBMS, không chỉ SQL Server và hành vi có thể rất thú vị. Đối với một, mặc dù thông thường các khóa chính được lập chỉ mục tự động (duy nhất), nhưng nó KHÔNG phải là tuyệt đối. Đôi khi, điều cần thiết là khóa chính KHÔNG được lập chỉ mục duy nhất.
Trong hầu hết các RDBMS, một chỉ mục duy nhất sẽ tự động được tạo trên một khóa chính nếu một chỉ mục chưa tồn tại . Do đó, bạn có thể tạo chỉ mục của riêng mình trên cột khóa chính trước khi khai báo nó là khóa chính, sau đó chỉ mục đó sẽ được bộ máy cơ sở dữ liệu sử dụng (nếu chấp nhận được) khi bạn áp dụng khai báo khóa chính. Thông thường, bạn có thể tạo khóa chính và cho phép tạo chỉ mục duy nhất mặc định của nó, sau đó tạo chỉ mục thay thế của riêng bạn trên cột đó, sau đó bỏ chỉ mục mặc định.
Bây giờ cho phần thú vị - khi nào bạn KHÔNG muốn một chỉ mục khóa chính duy nhất? Bạn không muốn một cái và không thể dung thứ một cái, khi bảng của bạn có đủ dữ liệu (hàng) để khiến việc duy trì chỉ mục quá tốn kém. Điều này thay đổi dựa trên phần cứng, công cụ RDBMS, đặc điểm của bảng và cơ sở dữ liệu cũng như tải hệ thống. Tuy nhiên, nó thường bắt đầu hiển thị sau khi một bảng đạt đến vài triệu hàng.
Vấn đề thiết yếu là mỗi lần chèn một hàng hoặc cập nhật cột khóa chính dẫn đến việc quét chỉ mục để đảm bảo tính duy nhất. Việc quét chỉ mục duy nhất đó (hoặc tương đương của nó trong bất kỳ RDBMS nào) trở nên đắt hơn nhiều khi bảng phát triển, cho đến khi nó chiếm ưu thế về hiệu suất của bảng.
Tôi đã xử lý vấn đề này nhiều lần với các bảng lớn tới hai tỷ hàng, 8 TB dung lượng lưu trữ và bốn mươi triệu lần chèn hàng mỗi ngày. Tôi được giao nhiệm vụ thiết kế lại hệ thống liên quan, bao gồm việc loại bỏ chỉ mục khóa chính duy nhất thực tế như bước một. Thật vậy, việc giảm chỉ số đó là cần thiết trong sản xuất chỉ đơn giản là để phục hồi sau sự cố ngừng hoạt động, trước khi chúng tôi tiến gần đến việc thiết kế lại. Việc thiết kế lại đó bao gồm việc tìm ra các cách khác để đảm bảo tính duy nhất của khóa chính và cung cấp quyền truy cập nhanh vào dữ liệu.