LƯU Ý: Câu trả lời này đề cập đến phát triển cấp doanh nghiệp trong lớn.
Đây là vấn đề RDBMS, không chỉ SQL Server và hành vi có thể rất thú vị. Đối với một, trong khi nó là phổ biến cho các khóa chính được tự động (duy nhất) lập chỉ mục, nó là không tuyệt đối. Có những lúc điều quan trọng là khóa chính KHÔNG được lập chỉ mục duy nhất.
Trong hầu hết các RDBMS, chỉ mục duy nhất sẽ tự động được tạo trên khóa chính nếu chưa tồn tại. Do đó, bạn có thể tạo chỉ mục của riêng bạn trên cột khóa chính trước khi khai báo nó làm khóa chính, sau đó chỉ mục đó sẽ được sử dụng (nếu được chấp nhận) bởi công cụ cơ sở dữ liệu 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 chỉ mục duy nhất mặc định của nó được tạo, sau đó tạo chỉ mục thay thế của riêng bạn trên cột đó, sau đó thả 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, và không thể chịu đựng được một, khi bảng của bạn mua lại đủ dữ liệu (hàng) để làm cho việc duy trì chỉ mục quá đắt. Đ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 và tải hệ thống. Tuy nhiên, nó thường bắt đầu biểu hiện khi một bảng đạt đến vài triệu hàng.
Vấn đề quan trọng là mỗi lần chèn một hàng hoặc cập nhật của cột khóa chính dẫn đến 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 giá trị 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ó thống trị 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 bộ nhớ và 40 triệu hàng chèn 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 giảm 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 từ một cúp, trước khi chúng tôi thậm chí đã gần với một thiết kế lại. Việc thiết kế lại đó bao gồm việc tìm kiếm các cách khác để đảm bảo tính duy nhất của khóa chính và cung cấp truy cập nhanh vào dữ liệu.
Nguồn
2009-01-20 20:07:55
Thiệt hại của các chỉ mục không sử dụng thực sự rất có hại. Đối với một điều, chỉ số ăn lên lưu trữ. Đối với một điều khác, nó làm chậm ghi và cập nhật. Luôn xóa các chỉ mục sẽ không được sử dụng. – Pacerier