外键是否自动创建索引?
MS SQL Server 2000
我对这个问题感到无聊,但我被告知,如果我外键键入两个表,那么SQL Server将创建类似于子表中的索引的东西。 我很难相信这是真实的,但无法找到与此相关的更多信息。
我问这个问题的真正原因是因为我们在一个可能有15个相关表的表的delete语句中遇到了一些非常慢的响应时间。 我问过我们的数据库人员,他说如果在这些字段上有一个外键,那么它就像一个索引。 你有什么经验呢? 我应该在所有外键字段上添加索引还是仅仅是不必要的开销?
外键是一个约束,即两个表之间的关系 - 与索引本身无关。
但是一个已知的事实是,索引属于任何外键关系的所有列是非常有意义的,因为通过FK关系,您通常需要查找关联表并根据单个值或一系列值。
因此,索引FK中涉及的任何列是很有意义的,但FK本身不是索引。
查看Kimberly Tripp的优秀文章“SQL Server何时停止在外键列上放置索引?”。
哇,答案都在地图上。 所以文档说:
FOREIGN KEY约束是索引的候选者,因为:
PRIMARY KEY约束的更改通过相关表中的FOREIGN KEY约束进行检查。
通过将一个表的FOREIGN KEY约束中的列与另一个表中的主键或唯一键列进行匹配,将相关表中的数据组合到查询中时,通常在连接条件中使用外键列。 索引允许Microsoft®SQL Server™2000快速在外键表中查找相关数据。 但是,创建此索引不是必需的。 即使两个表之间没有定义PRIMARY KEY或FOREIGN KEY约束,但两个表之间的外键关系指示这两个表已经过优化,以便在使用这些键的查询中进行组合其标准。
所以它似乎很清楚(尽管文档有点混乱),它实际上并没有创建索引。
不,在外键字段上没有隐式索引,否则为什么微软会说“在外键上创建索引通常是有用的”。 您的同事可能会将引用表中的外键字段与引用表中的主键混淆 - 主键会创建隐式索引。
链接地址: http://www.djcxy.com/p/13321.html