外键是否自动创建索引?

删除回忆录丶 提交于 2020-02-26 17:26:59

我被告知,如果我将两个表外键,那么SQL Server将创建类似于子表中的索引的东西。 我很难相信这是真的,但找不到与此有关的具体内容。

我之所以提出这个问题的真正原因是因为我们在一个删除语句中遇到了一个非常慢的响应时间,这个表可能包含15个相关表。 我问过我们的数据库人,他说如果字段上有外键,那么它就像一个索引。 你有什么经历? 我应该在所有外键字段上添加索引还是只是不必要的开销?


#1楼

在PostgeSql中,如果你点击\\ d tablename,你可以自己检查索引

您将看到已在具有主键和唯一约束的列上自动创建btree索引,但不会在具有外键的列上创建。

我认为这至少对postgres来说是回答你的问题。


#2楼

外键不会创建索引。 只有备用键约束(UNIQUE)和主键约束才能创建索引。 在Oracle和SQL Server中也是如此。


#3楼

我注意到实体框架6.1指向MSSQL会自动在外键上添加索引。


#4楼

外键是约束,是两个表之间的关系 - 与索引本身无关。

但是已知的事实是,将所有列作为任何外键关系的一部分的索引很有意义,因为通过FK关系,您通常需要查找相关表并基于提取某些行单个值或一系列值。

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

查看Kimberly Tripp的优秀文章“SQL Server何时停止在外键列上放置索引?”


#5楼

据我所知。 外键仅添加一个约束,即子键中的值也可以在父列的某处表示。 它并没有告诉数据库,子键也需要被索引,只能被约束。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!