我有一个查询需要运行它看起来像这样。
Select a.ColumnA,a.ColumnB,a.ColumnC,a.CoulmnD,a.columnE,...b.ColumnH
from Table A a
inner join Table B b
on a.columnB = b.ColumnB
Where a.columnA = @VariableA
现在它在表A上有一个聚集索引,就像这样
Clustered Index on ColumnA
它在表A上也有一个非聚集索引,如此
NonClustered Index on (ColumnA,ColumnB) include (ColumnC,ColumnD)
我是否应该将ColumnsE-G添加到索引中?
答案 0 :(得分:2)
当您在执行中看到索引扫描而不是预期的搜索时,验证比较列的数据类型 和参数是否相同计划。
当数据类型不同时,SQL Server必须首先将优先级较低的操作数转换为较高优先级的数据类型(例如varchar
到nvarchar
)。如果是必须转换的列值,则转换会阻止对列的索引进行有效使用,因为必须先转换每行的列值,然后才能进行比较。这称为不可sargable 表达式,阻止更有效的索引搜索。