首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外键是否会自动创建索引?

问外键是否会自动创建索引?
EN

Stack Overflow用户
提问于 2009-05-08 02:06:18
回答 11查看 139.7K关注 0票数 426

有人告诉我,如果我为两个表设置外键,SQL Server将在子表中创建类似于索引的东西。我很难相信这是真的,但我找不到太多与此相关的东西。

我问这个问题的真正原因是,对于一个可能有15个相关表的表,我们在delete语句中遇到了一些非常慢的响应时间。我问过我们的数据库人员,他说如果字段上有一个外键,那么它就像一个索引。你对此有什么经验?我应该在所有的外键字段上添加索引,还是仅仅是不必要的开销?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-05-07 18:10:24

外键是一种约束,是两个表之间的关系--这与索引本身没有任何关系。

但众所周知,索引属于任何外键关系的所有列非常有意义,因为通过FK关系,您通常需要查找关联表,并根据单个值或一系列值提取特定的行。

因此,对FK中涉及的任何列进行索引是很有意义的,但FK本身并不是索引。

请查看Kimberly Tripp的优秀文章"When did SQL Server stop putting indexes on Foreign Key columns?"。

票数 386
EN

Stack Overflow用户

发布于 2009-05-07 18:18:01

哇,答案比比皆是。所以Documentation说:

FOREIGN KEY约束是索引的候选,因为:

通过将一个表的外键约束中的列与另一个表中的主键或唯一键列进行匹配,在查询中组合相关表的数据时,通常会在联接条件中使用相关tables.

  • Foreign键列中的外键约束来检查对主键约束的
  • 更改。索引允许Microsoft®SQL Server™2000在外键表中快速查找相关数据。但是,创建此索引并不是必需的。即使两个相关表之间没有定义主键或外键约束,也可以组合这两个表中的数据,但两个表之间的外键关系表明,这两个表已经过优化,可以在使用这些键作为其条件的查询中组合。

因此,它实际上并没有创建索引,这一点似乎相当清楚(尽管文档有点混乱)。

票数 47
EN

Stack Overflow用户

发布于 2009-05-07 18:11:55

不,在外键字段上没有隐式索引,否则为什么微软会说"Creating an index on a foreign key is often useful"。您的同事可能会混淆引用表中的外键字段和引用的表中的主键-主键确实会创建隐式索引。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/836167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档