我有一个查询,看起来像这样查询是否可以为表使用多个非聚集索引?
SELECT TOP 1000 C.iId_company
FROM dbo.Company AS C WITH(NOLOCK)
WHERE
C.col_1 LIKE 'something%'
OR C.col_1 LIKE 'something2%'
OR C.col_1 LIKE 'something3%'
OR C.col_2 LIKE 'something%'
OR C.col_2 LIKE 'something2%'
OR C.col_2 LIKE 'something3%'
我试图使该查询更快,我尝试添加上COL_1和COL_2指标。如果我注释col_2的条件,那么对于col_1,查询是非常快的,同样的事情(如果我注释掉关于col_1的条件)。但是当我这样离开时,这是一个老故事,非常缓慢。
我对执行计划的看法是,一次只能使用一个索引,SQL在使用第一个索引后执行子集扫描。我尝试了不同的东西(使两列的索引,但也不工作)
其实我唯一的解决方案是拆分查询和使用UNION。有没有办法让这种查询更快,并保存在一个查询中?
如果您尝试“OPTION(FORCESEEK)'提示会怎么样?那么这是否会做索引工会? – 2011-04-26 15:02:14
@Martin在这种情况下,你不可以在这两列上创建一个索引吗? – rsbarro 2011-04-26 15:06:35
@rsbarro。如果他们创建了一个复合索引'col1,col2'或'col2,col1',那么它只能分别查找col_1 LIKE'%'或'col_2 LIKE'某些%''。它仍然需要扫描整个索引以确定其他“OR”标准。 – 2011-04-26 15:09:18