Không quan trọng nếu chúng được tạo thông qua Tập lệnh T-SQL hoặc qua Trình thiết kế. Câu hỏi của bạn là một chút mơ hồ, vì vậy tôi không chắc chắn nếu bạn cũng yêu cầu nếu nó là okay để lập chỉ mục tất cả các phím nước ngoài. Tuy nhiên, nếu bạn đang có, chỉ cần được tạo ra trên các cột được tham chiếu thường xuyên trong các truy vấn và bạn có thể làm như sau để cải thiện hiệu suất:
Chạy thuật sĩ cơ sở dữ liệu điều chỉnh mà sẽ cung cấp một bản tóm tắt của những cải tiến và giới thiệu chỉ số .
Lập chỉ mục tất cả khóa ngoại và chạy kế hoạch thực hiện (Để xem liệu truy vấn có hoạt động nhanh hơn hay chậm hơn).
Để tạo một chỉ số qua T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
Để có được một danh sách tất cả các phím nước ngoài:
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
Để tạo ra một kịch bản áp dụng chỉ số trên tất cả các phím nước ngoài bạn có thể làm điều này:
SELECT 'CREATE INDEX [IX_' + f.name + '] ON ' + OBJECT_NAME(f.parent_object_id) + '(' + COL_NAME(fc.parent_object_id, fc.parent_column_id) + ')]'
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
http://msdn.microsoft.com/en-us/library/ms188783.aspx
Nguồn
2012-05-24 10:20:44
Tôi nghĩ rằng bạn cần phải làm rõ câu hỏi của bạn, xem quan sát này trong câu trả lời của Darren: * "Câu hỏi của bạn là một chút mơ hồ , vì vậy tôi không chắc chắn liệu bạn có đang hỏi liệu có thể lập chỉ mục tất cả các khóa ngoại không. "* – Kev