外键是否自动建立索引?

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

我之因此提出这个问题的真正缘由是由于咱们在一个删除语句中遇到了一个很是慢的响应时间,这个表可能包含15个相关表。 我问过咱们的数据库人,他说若是字段上有外键,那么它就像一个索引。 你有什么经历? 我应该在全部外键字段上添加索引仍是只是没必要要的开销? 框架


#1楼

在PostgeSql中,若是你点击\\ d tablename,你能够本身检查索引 post

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

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


#2楼

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


#3楼

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


#4楼

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

可是已知的事实是,将全部列做为任何外键关系的一部分的索引颇有意义,由于经过FK关系,您一般须要查找相关表并基于提取某些行单个值或一系列值。 table

所以,对FK中涉及的任何列进行索引是颇有意义的,但FK自己不是索引。 bug

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


#5楼

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

相关文章
相关标签/搜索