Kiến thức cấp thấp hơn của tôi về SQL (Server 2008) còn hạn chế và hiện đang được ghép bởi các DBA của chúng tôi. Hãy để tôi giải thích (tôi đã đề cập đến những tuyên bố rõ ràng với hy vọng rằng tôi đúng, nhưng nếu bạn thấy điều gì sai, vui lòng cho tôi biết) tình huống:
Chúng tôi có một cái bàn chứa 'Lệnh của Tòa án' cho mọi người. Khi tôi tạo bảng, (Tên: CourtOrder), tôi đã tạo nó như sau:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
Sau đó, tôi áp dụng chỉ mục không phân cụm cho khóa chính (để tăng hiệu quả). Lý do của tôi là nó là một trường duy nhất (khóa chính) và nên được lập chỉ mục, chủ yếu cho mục đích lựa chọn, như chúng ta thườngSelect from table where primary key = ...
Sau đó, tôi đã áp dụng chỉ mục ĐÃ ĐƯỢC ĐIỀU CHỈNH trên PersonId. Lý do là để nhóm các đơn đặt hàng cho một người cụ thể, vì phần lớn công việc là nhận đơn đặt hàng cho một người. Vì thế,select from mytable where personId = ...
Tôi đã được kéo lên về điều này bây giờ. Tôi đã được thông báo rằng chúng ta nên đặt chỉ mục nhóm trên khóa chính và chỉ mục bình thường trên personId. Điều đó dường như rất lạ đối với tôi. Trước hết, tại sao bạn lại đặt một chỉ mục nhóm trên một cột duy nhất? nó là gì? Chắc chắn đó là một sự lãng phí của chỉ mục nhóm? Tôi đã tin rằng một chỉ mục bình thường sẽ được sử dụng trên một cột duy nhất. Ngoài ra, nhóm chỉ mục sẽ có nghĩa là chúng ta không thể nhóm một cột khác (Mỗi một bảng, phải không?).
Lý do khiến tôi bị nói rằng tôi đã mắc sai lầm là họ tin rằng việc đặt một chỉ mục được phân cụm trên PersonId sẽ khiến việc chèn chậm. Đối với tốc độ tăng 5% của một lựa chọn, chúng tôi sẽ nhận được sự suy giảm 95% về tốc độ khi chèn và cập nhật. Điều đó có đúng và hợp lệ không?
Họ nói rằng bởi vì chúng tôi phân cụm personId, SQL Server phải sắp xếp lại dữ liệu khi chúng tôi chèn hoặc thực hiện thay đổi đối với PersonId.
Vì vậy, tôi đã hỏi, tại sao SQL lại có khái niệm CHỈ SỐ ĐƯỢC ĐIỀU CHỈNH, nếu nó quá chậm? Nó có chậm như họ nói không? Tôi nên thiết lập các chỉ mục của mình như thế nào để đạt được hiệu suất tối ưu? Tôi đã nghĩ rằng SELECT được sử dụng nhiều hơn INSERT ... nhưng họ nói rằng chúng tôi đang gặp sự cố khóa trên INSERTS ...
Hy vọng ai đó có thể giúp tôi.