失效狀況分析:
- <>
- 單獨的>,<,(有時會用到,有時不會)
- like "%_" 百分號在前.(可採用在創建索引時用reverse(columnName)這種方法處理)
- 表沒分析.
- 單獨引用複合索引裏非第一位置的索引列.
- 字符型字段爲數字時在where條件裏不添加引號.
- 對索引列進行運算.須要創建函數索引.
- not in ,not exist.
- 當變量採用的是times變量,而表的字段採用的是date變量時.或相反狀況。
- 索引失效。
- 基於cost成本分析(oracle由於走全表成本會更小):查詢小表,或者返回值大概在10%以上
- 有時都考慮到了 但就是不走索引,drop了從建試試在
- B-tree索引 is null不會走,is not null會走,位圖索引 is null,is not null 都會走
- 聯合索引 is not null 只要在創建的索引列(不分前後)都會走,in null時 必需要和創建索引第一列一塊兒使用,當創建索引第一位置條件是is null 時,其餘創建索引的列能夠是is null(但必須在全部列都知足is null的時候),或者=一個值;
- 當創建索引的第一位置是=一個值時,其餘索引列能夠是任何狀況(包括is null =一個值),以上兩種狀況索引都會走。其餘狀況不會走。
針對狀況10的處理:
先能夠分析下表,可是分析表的時候會加鎖,這個須要注意。語句以下:html
analyze table table_name compute statisticsoracle
致使的緣由:
在SQL*LOADER 加載過程當中會維護索引,因爲數據量比較大,在SQL*LOADER 加載過程當中出現異常狀況,致使ORACLE 來不及維護索引,致使索引處於失效狀態,影響查詢和加載。
異常狀況主要有:在加載過程當中殺掉SQL*LOADER 進程,重啓,表空間不夠等。函數
查詢索引是否失效主要有如下兩個視圖:spa
select * from dba_indexes t;
select * from user_indexes;code
解決方法:
重建索引
查看索引類型: 是否分區索引 htm
- 非分區索引
- 分區索引
重建全部狀態爲unusable的索引,重建腳本: blog
ALTER INDEX 索引名
REBUILD PARTITION 分區名
TABLESPACE 表空間名
ONLINE NOLOGGING