2014-01-16 21 views
0

我知道外键在默认情况下不会被编入索引,但是如果原始引用是索引,FK是否也是索引 - 即索引传递?如果Table1.ColumnA被索引,是否还会索引外键Table2.ColumnA_FK?

实施例:

  • 表1对列的非聚集综合指数(A,B)
  • 表2具有到Table1.A和Table1.B
  • 引用两个外键

对Table2.A_FK或Table2.B_FK运行SELECT会提供索引性能,即〜O(log [n])而不是非索引的O(n)?在SQL Server Management Studio中,对象资源管理器不会将这两个外键列为Table2的索引。

+0

这可能有帮助 - http://stackoverflow.com/questions/836167/does-a-foreign-key-automatically-create-an-index – MusicLovingIndianGirl

回答

1

总之 - 没有。 如果你想table2的字段也被索引,你应该自己明确地索引它(和你说的,这可能是一个好主意)

+0

谢谢。有一件事我不明白:为什么有人想要一个引用索引列的非索引外键(例如我的情况就是这种情况 - 我没有设计数据库)?无论如何不会自动在原始(参考)索引的外键上创建一个索引,即无重复等。 – w128

+2

否 - 引用表上的索引将索引该表中的值,而不是其指向的值。然而,我不能从我的头顶上拿出一个用例,你不想索引一列作为外键的列。也许如果它的基数很低或者低于这些线。 – Mureinik

+1

@Mureinik:好吧,您可能想要创建一个索引,其中不仅包含FK列 - 还包含第二列,第三列以及可能包含的一些列,以涵盖一些查询。您的FK专栏仍然有索引(这是一个很好的例子) - 但也许不能*仅限于* FK专栏 –