where子句和join子句的索引

时间:2015-11-05 20:30:55

标签: sql-server tsql

请考虑以下事项:

  • 表1包含以下列:a,b,m
  • 表2包含以下列:a,b,x,y

这是我的疑问:

select t2.a, t2.b, t1.m
from table2 t2
join table1 t1 on t1.a = t2.a 
              and t2.b = t2.b
where t2.x = 'some value'
  and t2.y = 'some other value'

我必须优化此查询。

我有以下非聚集索引:

  • table1上的索引,列a和b
  • table2上的索引,列a 和b
  • table2上的索引,列x和y

我是否会从table2上的另一个索引中受益,该索引将涵盖此查询中使用的所有列:a,b,x和y?

1 个答案:

答案 0 :(得分:1)

考虑到x和y组合将提供单行,重要的是在x和y上的table2上有索引,在a和b上有table1上的索引。或者,您可以使第一个索引唯一并添加包含的列,如下所示:

CREATE UNIQUE INDEX IX_table2_x_y ON table2 (x,y) INCLUDE (a,b)
CREATE INDEX IX_table1_a_b ON table1 (a,b) INCLUDE (m)