2010-08-09 24 views
1

我正在創建sql查詢,並且我在一本書中讀到了當使用NOT運算符或LIKE運算符Indexes不起作用。這個陳述是多少真實。如果陳述是真實的,我們如何避免這種情況。應該如何做一個查詢來完成避免這些運算符的相同工作。關於哪些操作索引不能正常工作或者沒有使用

什麼所有其他領域在SQL Server中索引延遲。

回答

3

就像是通配符萊夫特賽德不能使用索引,如果一個是爲列定義語句:

WHERE column LIKE '%abc' 
WHERE column LIKE '%abc%' 

但無論這些可以使用索引:

WHERE column LIKE 'abc%' 
WHERE column LIKE 'abc' 

坦率地說,使用LIKE對於非常簡單的文本搜索 - 如果您確實需要一個性能良好的文本搜索,請查看全文搜索(FTS)。全文搜索有它自己的索引。

決定實際上歸結爲優化器使用哪個索引,但確保索引不會用於在函數調用中包裝列值。例如,這將不使用索引:

WHERE CHARINDEX(column, 'abc') > 0 
WHERE CAST(column AS DATETIME) <= '2010-01-01' 

,方便您隨時隨地操縱表中的數據 - 特別是數據類型的改變 - 將呈現一個指標無用的,因爲指數是不變的價值觀,有沒有辦法涉及到改變的數據。

1

查詢分析器內部有一個稱爲「顯示執行計劃」(位於查詢下拉菜單中)的選項。如果您打開此選項,那麼無論何時在查詢分析器中運行查詢,您都將獲得查詢執行計劃。使用它來分析查詢的有效性。根據結果​​,您可能需要使用其他查詢或添加更好的索引。例如。表掃描意味着不使用索引,書籤查找意味着你應該限制行或使用覆蓋索引,如果有一個過濾器可能需要從where子句中刪除任何函數調用,排序可能會很慢。