为SQL Server数据库中的每个外键创建索引是一种好习惯吗?
答案 0 :(得分:52)
是的,这是一个很好的做法,请看这里:When did SQL Server stop putting indexes on Foreign Key columns?向下滚动到索引外键列是否有任何好处?部分
答案 1 :(得分:39)
每个外键?在选择性低的情况下(即,许多值是重复的),索引可能比表扫描更昂贵。此外,在高活动环境中(比查询更多的插入/更新/删除活动)维护索引的成本可能会影响系统的整体性能。
答案 2 :(得分:16)
索引外键列的原因与索引任何其他列的原因相同:如果要按列过滤行,请创建索引。
例如,如果您有表[User](ID int,Name varchar(50))和表[UserAction](UserID int,Action varchar(50)),您很可能希望能够找到哪些动作特定用户做了。例如,您将运行以下查询:
select ActionName from [UserAction] where UserID = @UserID
如果您不打算按列过滤行,则无需在其上放置索引。即使你这样做也值得,只要你有超过20 - 30行。
答案 3 :(得分:5)
来自MSDN:FOREIGN KEY Constraints
在外键上创建索引通常很有用,原因如下: