我有很多表与外键,有些有索引,而其他没有.
所有外键都被命名为FK_<外键的名称>索引名称为IX_<外键的名称> ;. 有没有一些良好的做法,给定列的基数,创建(或不)索引?
这可以用T-sql命令编写吗?
所有外键都被命名为FK_<外键的名称>索引名称为IX_<外键的名称> ;. 有没有一些良好的做法,给定列的基数,创建(或不)索引?
这可以用T-sql命令编写吗?
解决方法
如果它们是通过T-sql脚本或通过Designer创建的,这并不重要.你的问题有点含糊不清,所以我不确定你是否也可以索引所有的外键.但是,如果是,则应在查询中频繁引用的列上创建索引,并且可以执行以下操作来提高性能:
>运行数据库调优向导,该向导将提供改进的摘要并推荐索引.
>索引所有外键并运行执行计划(查看查询执行速度更快或更慢).
要通过T-sql创建索引:
CREATE INDEX IX_INDEX_NAME ON Table (FieldName);
要获取所有外键的列表:
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
要生成在所有外键上应用索引的脚本,您可以执行以下操作:
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