使用INCLUDE索引OUTER / CROSS APPLY的WHERE子句

时间:2015-08-17 14:14:32

标签: sql sql-server indexing cross-apply outer-apply

我已经读过,在使用WHERE子句限制返回的记录时(即SELECT * from Table1 WHERE Field1 = 'abc'),应该使用索引列。

使用APPLY时此规则是否适用,如

SELECT t.Field1,x.Field2 from Table1 t OUTER APPLY (select * from Table2 x WHERE t.Field1 = x.Field1

换句话说,将Table2.Field1上的索引加快上述查询?

很抱歉,如果答案很明显,我对OUTER和CROSS APPLY的机制没有充分的了解,只是可以用它们代替JOIN。

修改 一个更好的问题,基于这个线程(Hard and Fast Rules for include columns in Index)将是,我应该对我从另一个表中提取的所有列使用INCLUDE,如果是这样,使用{{1而不是OUTER APPLY (select Field1,Field2

2 个答案:

答案 0 :(得分:0)

好吧,无论何时为列指定条件,索引都有助于加快搜索速度。

但需要付出代价:在插入过程中,必须重新计算索引,当然还需要磁盘空间。但除此之外,索引(几乎)只有优势。

答案 1 :(得分:0)

应该对OUTER Apply上使用的列进行索引,并且应该用于加入主查询,这将改进查询检索过程,因为它将用作聚簇索引查找,它将使查询更快,执行计划将在成功检索时重复使用。