標籤:des 使用 sp 資料 問題 bs nbsp 資料庫 sql
有關於資料庫中索引失效的問題,網上也有相關的討論。不過他們是針對oracle資料庫進行討論的。那麼在sql server資料庫中索引什麼時候
會失效呢。總結了一下,不過我沒有經過測試。沒測試就沒有發言權,這裡僅供自己參考。
首先,所謂失效。並不真的就是這個索引被刪除了。而是在這些情況下,DBMS不會檢索索引列表了。執行速度和沒有這個索引時的速度一樣。
但是再執行另外的一條語句。同樣索引可以正常起作用。所以索引的失效是針對某條sql語句的,而不是針對索引本身的。那麼在哪些情況下,
確切的說是在哪類語句執行時索引不起作用呢。總結如下:
1.索引欄位進行判空查詢時。也就是對索引欄位判斷是否為NULL時。語句為is null 或is not null。
比如:select * from temp where time is null此時就不檢索time欄位上的索引表了。也就是索引在這條語句執行時失效了。接著再執
行select * from temp where time = ‘2010-06-01‘此時就會檢索索引表了。索引又起作用了。
2.對索引欄位進行like查詢時。比如:select * from temp where des like ‘%王某某‘。網上有的例子說like ‘xx%‘索引起作用。我沒試過。
3.判斷索引列是否不等於某個值時。‘!=’操作符。比如:select * from temp where amount != 0.
4.對索引列進行運算。這裡運算包括+-*/等運算。也包括使用函數。比如:
select * from temp where amount+count>10 此時索引不起作用。
select * from temp where round(amount)>10 此時索引也不起作用。
也就是說如果不是直接判斷索引欄位列,而是判斷運算或其它函數處理後的索引列。索引均不起作用。
sql server資料庫中索引失效的問題討論