微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql server:必要时在外键上创建索引

我有很多表与外键,有些有索引,而其他没有.
所有外键都被命名为FK_<外键的名称>索引名称为IX_<外键的名称&gt ;. 有没有一些良好的做法,给定列的基数,创建(或不)索引?
这可以用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

http://msdn.microsoft.com/en-us/library/ms188783.aspx

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐