如何为两个或多个表的JOIN结果建立索引,以提高SQL Server的性能?


9

我是索引编制的新手,并介绍了索引编制的基础知识。我可以在相应表的索引部分内找到主键约束的默认聚集索引,但是创建外键约束后,我找不到任何索引。

现在我有一个要求,应该在其中实施索引以提高性能。我已经读过关于索引外键以提高JOIN结果的性能的信息。

我是否需要将外键列添加到其他非聚集索引中,或者外键具有默认索引?

如果我的SQL表结构如下并且我使用t1_col3的WHERE子句进行了JOIN查询,如何有效地实现索引

               table1                       table2
               ------                       ------
               t1_col1(pk)                  t2_col1(pk)
               t1_col2                      t2_col2
               t1_col3                      t2_col3
               t1_col4                      t2_col4
               t2_col1(FK)

Answers:


13

默认情况下,外键没有索引。您必须创建一个。

在这种情况下,我建议使用其中一种。这取决于2列的相对选择性

CREATE INDEX IX_table2fk ON
              table1 (t2_col1, t1_col3)
              INCLUDE (any columns needed for the query)

要么

CREATE INDEX IX_table2fk ON
              table1 (t1_col3, t2_col1)
              INCLUDE (any columns needed for the query)

INCLUDE将使索引覆盖以避免键/书签查找


1
包括在SQL-Server 2005中只是新功能的情况下,你还在上的SQL服务器2000
bernd_k

@bernd_k:仅6年3版本之前:-)
gbn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.