我有一個查詢,看起來像這樣查詢是否可以爲表使用多個非聚集索引?
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