首頁 > 資料庫 > Oracle > oracle怎麼判斷索引是否失效

oracle怎麼判斷索引是否失效

WBOY
發布: 2022-05-25 15:31:15
原創
6185 人瀏覽過

在oracle中,可以利用「select status from user_indexes where index_name='索引名稱';」語句判斷索引是否失效;若傳回的結果是VALID,則表示索引沒有失效,否則表示索引失效。

oracle怎麼判斷索引是否失效

本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle怎麼判斷索引是否失效

語法如下:

select status from user_indexes where index_name='索引名称';
登入後複製

如果傳回結果為VALID,則表示索引有效!

範例如圖所示:

oracle怎麼判斷索引是否失效

擴充知識:

索引失效解決方法

1. 選用適合的Oracle優化器

Oracle的優化器共有3種:

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

設定缺省的優化器,可以透過對init.ora檔案中OPTIMIZER_MODE參數的各種聲明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS 。你當然也在SQL句級或是會話(session)級對其進行覆蓋。

為了使用基於成本的優化器(CBO, Cost-Based Optimizer) , 你必須經常運行analyze 命令,以增加數據庫中的對象統計信息(object statistics)的準確性。

如果資料庫的最佳化器模式設定為選擇性(CHOOSE),那麼實際的最佳化器模式將和是否執行過analyze指令有關。如果table已經被analyze過, 最佳化器模式將自動成為CBO , 反之,資料庫將採用RULE形式的最佳化器。

(分析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後,發現是資料統計的問題,具體的解決方法是執行以上語句】

在預設情況下,Oracle採用CHOOSE優化器, 為了避免那些不必要的全表掃描(full table scan), 你必須盡量避免使用CHOOSE優化器,而直接採用基於規則或者基於成本的優化器。

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是索引名。其執行計劃跟測試資料庫一致,都是使用用 'RECORD_ENTITYID' 這個索引,邏輯讀寫同樣為4。

後來經過測試,在不加hint的情況下,對該表和兩個索引執行analyze 後,同樣也能使用 'RECORD_ENTITYID' 這個索引。但因為表格更新頗為頻繁,不知道要多久就要再分析一次

推薦教學:《Oracle影片教學

以上是oracle怎麼判斷索引是否失效的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板