Làm cách nào để lập chỉ mục kết quả THAM GIA của hai hoặc nhiều bảng để cải thiện hiệu suất trong máy chủ SQL?


9

Tôi chưa quen với việc lập chỉ mục và trải qua những điều cơ bản về lập chỉ mục. Tôi có thể tìm thấy một chỉ mục được nhóm mặc định cho ràng buộc khóa chính trong phần chỉ mục của bảng tương ứng, nhưng sau khi tạo một ràng buộc khóa ngoài tôi không thể tìm thấy bất kỳ.

Bây giờ tôi có một yêu cầu trong đó lập chỉ mục nên được thực hiện để cải thiện hiệu suất. Tôi đã đọc về lập chỉ mục khóa ngoại để cải thiện hiệu suất của kết quả THAM GIA .

Tôi có cần thêm cột khóa ngoại vào một chỉ mục không phân cụm bổ sung hoặc khóa ngoại có một chỉ mục mặc định không?

Làm cách nào để triển khai lập chỉ mục một cách hiệu quả nếu cấu trúc bảng SQL của tôi như sau và tôi có một truy vấn THAM GIA với mệnh đề WHERE bằng cách sử dụng t1_col3

               table1                       table2
               ------                       ------
               t1_col1(pk)                  t2_col1(pk)
               t1_col2                      t2_col2
               t1_col3                      t2_col3
               t1_col4                      t2_col4
               t2_col1(FK)

Câu trả lời:


13

Khóa ngoại không có chỉ mục theo mặc định. Bạn phải tạo một cái.

Trong trường hợp này, tôi đề nghị một trong hai. Nó phụ thuộc vào độ chọn lọc tương đối của 2 cột

CREATE INDEX IX_table2fk ON
              table1 (t2_col1, t1_col3)
              INCLUDE (any columns needed for the query)

HOẶC LÀ

CREATE INDEX IX_table2fk ON
              table1 (t1_col3, t2_col1)
              INCLUDE (any columns needed for the query)

INCLUDE sẽ thực hiện bao phủ chỉ mục để tránh tra cứu khóa / đánh dấu


1
Bao gồm là tính năng mới trong SQL-Server 2005. Chỉ trong trường hợp bạn vẫn ở trên máy chủ Sql 2000.
bernd_k

@bernd_k: Chỉ 6 năm và 3 phiên bản trước :-)
gbn
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.