有人告诉我,如果我为两个表设置外键,SQL Server将在子表中创建类似于索引的东西。我很难相信这是真的,但我找不到太多与此相关的东西。
我问这个问题的真正原因是,对于一个可能有15个相关表的表,我们在delete语句中遇到了一些非常慢的响应时间。我问过我们的数据库人员,他说如果字段上有一个外键,那么它就像一个索引。你对此有什么经验?我应该在所有的外键字段上添加索引,还是仅仅是不必要的开销?
发布于 2009-05-07 18:10:24
外键是一种约束,是两个表之间的关系--这与索引本身没有任何关系。
但众所周知,索引属于任何外键关系的所有列非常有意义,因为通过FK关系,您通常需要查找关联表,并根据单个值或一系列值提取特定的行。
因此,对FK中涉及的任何列进行索引是很有意义的,但FK本身并不是索引。
请查看Kimberly Tripp的优秀文章"When did SQL Server stop putting indexes on Foreign Key columns?"。
发布于 2009-05-07 18:18:01
哇,答案比比皆是。所以Documentation说:
FOREIGN KEY约束是索引的候选,因为:
通过将一个表的外键约束中的列与另一个表中的主键或唯一键列进行匹配,在查询中组合相关表的数据时,通常会在联接条件中使用相关tables.
因此,它实际上并没有创建索引,这一点似乎相当清楚(尽管文档有点混乱)。
发布于 2009-05-07 18:11:55
不,在外键字段上没有隐式索引,否则为什么微软会说"Creating an index on a foreign key is often useful"。您的同事可能会混淆引用表中的外键字段和引用的表中的主键-主键确实会创建隐式索引。
https://stackoverflow.com/questions/836167
复制相似问题