oracle怎么判斷索引是否失效

oracle中,可以利用“select status from user_indexes where index_name=’索引名稱’;”語句判斷索引是否失效;若返回的結(jié)果是VALID,則表示索引沒有失效,否則表示索引失效。

oracle怎么判斷索引是否失效

本教程操作環(huán)境:Windows10系統(tǒng)、Oracle 11g版、Dell G3電腦。

oracle怎么判斷索引是否失效

語法如下:

select?status?from?user_indexes?where?index_name='索引名稱';

如果返回結(jié)果為VALID,則表示索引有效!

示例如圖所示:

oracle怎么判斷索引是否失效

擴展知識:

索引失效解決方法

1. 選用適合的Oracle優(yōu)化器

Oracle的優(yōu)化器共有3種:

a. RULE (基于規(guī)則) b. COST (基于成本) c. CHOOSE (選擇性)。

設(shè)置缺省的優(yōu)化器,可以通過對init.ora文件中OPTIMIZER_MODE參數(shù)的各種聲明,如RULE,COST,CHOOSE,ALL_ROWS,F(xiàn)IRST_ROWS 。你當(dāng)然也在sql句級或是會話(Session)級對其進(jìn)行覆蓋。

為了使用基于成本的優(yōu)化器(CBO, Cost-Based Optimizer) , 你必須經(jīng)常運行analyze 命令,以增加數(shù)據(jù)庫中的對象統(tǒng)計信息(Object statistics)的準(zhǔn)確性。

如果數(shù)據(jù)庫的優(yōu)化器模式設(shè)置為選擇性(CHOOSE),那么實際的優(yōu)化器模式將和是否運行過analyze命令有關(guān)。如果table已經(jīng)被analyze過, 優(yōu)化器模式將自動成為CBO , 反之,數(shù)據(jù)庫將采用RULE形式的優(yōu)化器。

(分析table

analyze?table?PROD_PARTS?compute?statistics; ANALYZE?TABLE?PROD_PARTS?COMPUTE?STATISTICS?FOR?ALL?INDEXED?COLUMNS; analyze?table?PROD_PARTS?compute?statistics?for?table?for?all?indexes?for?all?indexed?columns;

)【有一次索引失效之后,請教dba后,發(fā)現(xiàn)是數(shù)據(jù)統(tǒng)計的問題,具體的解決辦法是執(zhí)行以上語句】

在缺省情況下,Oracle采用CHOOSE優(yōu)化器, 為了避免那些不必要的全表掃描(full table scan), 你必須盡量避免使用CHOOSE優(yōu)化器,而直接采用基于規(guī)則或者基于成本的優(yōu)化器。

2、?重建索引?

?alter?index?索引名?rebuild?【online】

3、強制索引

給該語句加上hint后,強制其使用’RECORD_ENTITYID’ 這個索引

sql語句變成這樣

引用

select?/*+?index(record,record_entityid)?*/?* from?RECORD where?entityId='24'?and?entityType='blog';

/*+ index(record,record_entityid) */ 中,index表示強制使用index,record是表名,record_entityid是索引名。其執(zhí)行計劃跟測試數(shù)據(jù)庫上一致,都是使用用 ‘RECORD_ENTITYID’ 這個索引,邏輯讀寫同樣為4。

后來經(jīng)過測試,在不加hint的情況下,對該表和兩個索引執(zhí)行analyze 后,同樣也能使用 ‘RECORD_ENTITYID’ 這個索引。但是因為該表更新頗為頻繁,不知道要多久就要再分析一次

推薦教程:《Oracle視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊15 分享