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

时间:2011-02-22 05:48:51

标签: sql-server-2008 indexing

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

现在我需要实施索引以提高性能。我读过索引外键以提高 JOIN结果的性能。

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

如果我的 SQL表格结构如下所示,我如何有效地实施索引?我使用 WHERE子句 JOIN查询 < strong> t1_col3

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

1 个答案:

答案 0 :(得分:1)

如果没有查询计划,实际查询或有关数据分发方式的详细信息,则无法提出具体建议,但请注意以下几点。

  1. 创建外键不会自动在外键列上创建索引。这只是一种约束。
  2. 因为表之间的连接经常涉及外键列,并且因为SQL Server需要定期检查外键列以强制执行约束,所以在外键列上放置索引通常是个好主意。 / LI>
  3. 根据您所描述的内容,您的查询具有针对t1_col3列的标准 - 它将使用该列过滤table1中的值; 可能(它实际上取决于查询计划,并且这取决于表中的数据分布以及查询中的其他条件和操作)最好在t1_col3上放置索引。
  4. 对于第三点,索引的有用性将在很大程度上取决于查询引擎用于在两个表之间实现连接的特定迭代器/运算符,以及哪个表驱动连接。

    您可以提供的任何进一步信息 - 查询,查询计划,行数 - 将有助于我们提供更具体的答案。