【发布时间】:2010-09-06 10:23:26
【问题描述】:
为 SQL Server 数据库中的每个外键建立索引有哪些优点(如果有的话)?
【问题讨论】:
标签: sql sql-server tsql
为 SQL Server 数据库中的每个外键建立索引有哪些优点(如果有的话)?
【问题讨论】:
标签: sql sql-server tsql
是的,这是一个很好的做法,请参阅此处:When did SQL Server stop putting indexes on Foreign Key columns? 向下滚动到 为外键列建立索引有什么好处吗? 部分
【讨论】:
每个外键?不会。在选择性较低的情况下(即许多值重复),索引可能比表扫描成本更高。此外,在高活动环境中(插入/更新/删除活动比查询多得多)维护索引的成本可能会影响系统的整体性能。
【讨论】:
索引外键列的原因与索引任何其他列的原因相同:如果要按列过滤行,请创建索引。
例如,如果您有表 [User] (ID int, Name varchar(50)) 和表 [UserAction] (UserID int, Action varchar(50)),您很可能希望能够找到哪些操作一个特定的用户做了。例如,您将运行以下查询:
select ActionName from [UserAction] where UserID = @UserID
如果您不打算按列过滤行,则无需在其上放置索引。即使你这样做了,只有当你有超过 20 到 30 行时才值得。
【讨论】:
User 中删除行,这会导致引擎根据UserID 在UserAction 中查找行。
来自 MSDN:FOREIGN KEY Constraints
在外键上创建索引通常很有用,原因如下:
【讨论】: