Tôi nên bắt đầu lập chỉ mục ngay từ đầu hoặc khi vấn đề về hiệu suất phát sinh?
Chiến lược lập chỉ mục có xu hướng phát triển khi các mô hình sử dụng xuất hiện. Điều đó nói rằng, cũng có các chiến lược và hướng dẫn thiết kế có thể được áp dụng lên phía trước.
Chọn một khóa cụm tốt . Bạn thường có thể xác định chỉ mục được nhóm thích hợp tại thời điểm thiết kế, dựa trên mẫu chèn dự kiến vào bảng. Nếu một trường hợp hấp dẫn nổi lên cho một sự thay đổi trong tương lai, vì vậy hãy là nó.
Tạo các ràng buộc chính và duy nhất khác của bạn . Chúng sẽ được thực thi bởi các chỉ mục duy nhất.
Tạo khóa ngoại của bạn và các chỉ mục không được liên kết . Khóa ngoại là các cột tham gia được tham chiếu thường xuyên nhất của bạn, vì vậy hãy lập chỉ mục chúng từ đầu.
Tạo các chỉ mục cho bất kỳ truy vấn rõ ràng có tính chọn lọc cao . Đối với các mẫu truy vấn bạn đã biết sẽ có tính chọn lọc cao và có khả năng sử dụng tra cứu thay vì quét.
Ngoài những điều trên, hãy thực hiện một cách tiếp cận dần dần và toàn diện để thực hiện các chỉ mục mới. Theo tổng thể, tôi có nghĩa là đánh giá lợi ích và tác động tiềm năng đối với tất cả các truy vấn và chỉ mục hiện có khi đánh giá một bổ sung.
Một vấn đề không phổ biến trong các vòng tròn SQL Server là quá mức, do kết quả của hướng dẫn từ các gợi ý DMV và chỉ số SSMS bị thiếu. Cả hai công cụ này đều không đánh giá các chỉ mục hiện có và sẽ vui lòng đề nghị bạn tạo một chỉ mục 6 cột mới thay vì thêm một cột vào chỉ mục 5 cột hiện có.
-- If you have this
CREATE NONCLUSTERED INDEX [IX_MyTable_MyIndex] ON [dbo].[MyTable]
(
[col1] ASC
, [col2] ASC
, [col3] ASC
, [col4] ASC
, [col5] ASC
)
-- But your query would benefit from the addition of a column
CREATE NONCLUSTERED INDEX [IX_MyTable_MyIndex] ON [dbo].[MyTable]
(
[col1] ASC
, [col2] ASC
, [col3] ASC
, [col4] ASC
, [col5] ASC
, [col6] ASC
)
-- SSMS will suggest you create this instead
CREATE NONCLUSTERED INDEX [IX_MyTable_AnotherIndexWithTheSameColumnsAsTheExistingIndexPlusCol6] ON [dbo].[MyTable]
(
[col1] ASC
, [col2] ASC
, [col3] ASC
, [col4] ASC
, [col5] ASC
, [col6] ASC
)
Kimberly Tripp có một số tài liệu tuyệt vời về chiến lược lập chỉ mục mà trong khi SQL tập trung có thể áp dụng cho các nền tảng khác. Đối với dân gian SQL Server, có một số công cụ tiện dụng để xác định các bản sao giống như ví dụ trên.
Chúng tôi cũng có thể tạo chỉ mục tạm thời trong khi thực hiện một truy vấn. Những ưu và nhược điểm của các kỹ thuật như vậy là gì?
Điều này thường chỉ áp dụng cho các truy vấn hiếm khi chạy, điển hình là ETL. Bạn cần đánh giá:
- Có phải thời gian để tạo chỉ mục làm giảm thời gian thực hiện truy vấn.
- Có phải chi phí bảo trì để giữ chỉ số tại chỗ lớn hơn thời gian cần thiết để tạo / giảm khi cần thiết.