Oracle索引失效问题
生活随笔
收集整理的這篇文章主要介紹了
Oracle索引失效问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Oracle 索引不起作用的幾種情況:
1,<>
2,單獨的>,<,(有時會用到,有時不會)
3,like "%_" 百分號在前.(可采用在建立索引時用reverse(columnName)這種方法處理)
4,表沒分析.
5,單獨引用復合索引里非第一位置的索引列.
6,字符型字段為數字時在where條件里不添加引號.
7,對索引列進行運算.需要建立函數索引.
8,not in ,not exist.
9,當變量采用的是times變量,而表的字段采用的是date變量時.或相反情況。
10, 索引失效。
11,基于cost成本分析(oracle因為走全表成本會更小):查詢小表,或者返回值大概在10%以上
12,有時都考慮到了 但就是不走索引,drop了從建試試在
13,B-tree索引 is null不會走,is not null會走,位圖索引 is null,is not null??都會走
14,聯合索引 is not null 只要在建立的索引列(不分先后)都會走,
in null時??必須要和建立索引第一列一起使用,當建立索引第一位置條件是is null 時,其他建立索引的列可以是is null(但必須在所有列都滿足is null的時候),或者=一個值;
當建立索引的第一位置是=一個值時,其他索引列可以是任何情況(包括is null =一個值),以上兩種情況索引都會走。其他情況不會走。
?
針對情況10的處理:
先可以分析下表,但是分析表的時候會加鎖,這個需要注意。語句如下: analyze table table_name compute statistics1)導致的原因:
???? 在SQL*LOADER 加載過程中會維護索引,由于數據量比較大,在SQL*LOADER 加載過程中出現異常情況,導致ORACLE 來不及維護索引,導致索引處于失效狀態,影響查詢和加載。
???? 異常情況主要有:在加載過程中殺掉SQL*LOADER 進程,重啟,表空間不夠等。 查詢索引是否失效主要有以下兩個視圖: select * from dba_indexes t;
select? * from user_indexes;
2)解決方法:
????? 重建索引
3)如何重建索引
????? a) 查看索引類型 select t1.index_name,t1.partitioned from Dba_Indexes t1where t1.Table_Name=upper('CCB_COGNOS_PROD_BALANCE_AA')
??????????? 顯示:
? 索引名稱 是否分區索引CCB_COGNOS_PROD_BALANCE_AA_N1 NO
???????b)非分區索引
重建索引:alter index cin.CCB_COGNOS_PROD_BALANCE_AA_N1 rebuild online Nologging
??????? c)分區索引
????????? 找出失效的分區索引:?? select t.Index_Name, t.Partition_Name, t.Tablespace_Name, t.Statusfrom Dba_Ind_Partitions twhere t.Index_Name = 'CMZ_LOCAL_IDX_2'
?? 重建所有狀態為unusable的索引
重建腳本:??
轉載于:https://www.cnblogs.com/millen/archive/2010/01/18/1650423.html
總結
以上是生活随笔為你收集整理的Oracle索引失效问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用户控件和自定义控件
- 下一篇: 网页垂直居中的写法