我已经读过,在使用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
答案 0 :(得分:0)
好吧,无论何时为列指定条件,索引都有助于加快搜索速度。
但需要付出代价:在插入过程中,必须重新计算索引,当然还需要磁盘空间。但除此之外,索引(几乎)只有优势。
答案 1 :(得分:0)
应该对OUTER Apply上使用的列进行索引,并且应该用于加入主查询,这将改进查询检索过程,因为它将用作聚簇索引查找,它将使查询更快,执行计划将在成功检索时重复使用。