– 查詢是否需要重建索引:
– 分析索引的數據塊是否有壞塊,以及根據分析得到的數據(存放在index_stats)來判斷索引是否需要重新建立。
SQL> analyze index AATD_IDX1 validate structure;
validate structure有兩種模式:
??offline :(默認)會對表加一個4級別的鎖(表共享),對run系統可能造成一定的影響。
??online :沒有表lock的影響,但當以online模式分析時, 在視圖index_stats沒有統計信息。
從9i開始,Oracle以建議使用dbms_stats package代替 analyze 了。
SQL> exec dbms_stats.gather_table_stats(‘用戶名’,‘表名’,cascade=>true);
– 下面視圖只支持:analyze index 命令
SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
HEIGHT DEL_LF_ROWS/LF_ROWS
---------- -------------------
1 0
Executed in 0.381 seconds
當查詢出來的 height>=4
或者 DEL_LF_ROWS/LF_ROWS>0.2 的場合,該索引考慮重建
Oracle的最終建議
一般而言,極少需要重建 B 樹索引,基本原因是 B 樹索引很大程度上可以自我管理或自我平衡。
大多數索引都能保持平衡和完整,因為空閑的葉條目可以重復使用。
插入/更新和刪除操作確實會導致索引塊周圍的可用空間形成碎片,但是一般來說這些碎片都會被正確的重用。
Clustering factor群集因子反映了給定的索引鍵值所對應的表中的數據排序情況。重建索引不會對群集因子產生影響,集群因子只能通過重組表的數據改變。
強烈建議不要定期重建索引,而應使用合適的診斷工具。
1、drop 原來的索引,然后再創建索引
刪除索引:drop index IX_PM_USERGROUP;
創建索引:create index IX_PM_USERGROUP on T_PM_USER (fgroupid);
說明:此方式耗時間,無法在24*7環境中實現,不建議使用。
2 、直接重建
alter index indexname rebuild; 或 alter index indexname rebuild online;
說明:此方式比較快,可以在24*7環境中實現,建議使用此方式
2.1 alter index rebuild 和alter index rebuil online的區別
1、掃描方式不同
Rebuild以index fast full scan(or table full scan) 方式讀取原索引中的數據來構建一個新的索引,有排序的操作;
rebuild online 執行表掃描獲取數據,有排序的操作;
說明:Rebuild 方式 (index fast full scan or table full scan 取決于統計信息的cost)
2 、rebuild 會阻塞 dml 操作 ,rebuild online 不會阻塞 dml 操作
3 、rebuild online 時系統會產生一個 SYS_JOURNAL_xxx 的 IOT 類型的系統臨時日志表,所有 rebuild online 時索引的變化都記錄在這個表中 , 當新的索引創建完成后 , 把這個表的記錄維護到新的索引中去 , 然后 drop 掉舊的索引 ,rebuild online 就完成了
注意點:
1、 執行rebuild操作時,需要檢查表空間是否足夠
2、雖然說rebuild online操作允許dml操作,但是還是建議在業務不繁忙時間段進行Rebuild操作會產生大量redo log
重建分區表上的分區索引
Alter index indexname rebuild partition PARTITION_NAME tablespace tablespacename;
– 分區索引重建:
select 'alter index '|| index_name || ’ rebuild partition ‘|| partition_name || ’ online;’ from user_ind_partitions where index_name =‘索引’ ;
– 子分區索引重建:
Alter index indexname rebuild subpartition PARTITION_NAME tablespace tablespacename;
– SQL 拼接
select 'alter index '|| index_name || ’ rebuild subpartition ‘|| subpartition_name || ’ online;’ from user_ind_subpartitions ;
注:這里的PARTITION_NAME指USER_IND_PARTITIONS中的PARTITION_NAME(索引分區中的索引分區名);
–查詢分區表索引所在的分區
SELECT PI.TABLE_NAME,
IP.INDEX_NAME,
IP.PARTITION_NAME,
IP.STATUS,
IP.GLOBAL_STATS
FROM USER_PART_INDEXES PI, USER_IND_PARTITIONS IP
WHERE PI.INDEX_NAME = IP.INDEX_NAME AND PI.TABLE_NAME = ‘表名’;
– 統計信息收集索引:
SQL>?EXEC dbms_stats.gather_table_stats(ownname =>‘用戶’ ,tabname =>‘表’ ,cascade => TRUE );
?????????????????????????文章推薦
| PostgreSQL | URL |
|---|---|
| 《課程筆記:PostgreSQL深入淺出》之 初識PostgreSQL(一) | http://www.sunline.cc/db/475817 |
| 《課程筆記:PostgreSQL深入淺出》之 PostgreSQL源碼安裝(二) | http://www.sunline.cc/db/475933 |
| 《課程筆記:PostgreSQL深入淺出》之初始化PostgreSQL(三) | http://www.sunline.cc/db/479524 |
| 《課程筆記:PostgreSQL深入淺出》之PSQL管理工具-常用(四) | http://www.sunline.cc/db/479560 |
| 《課程筆記:PostgreSQL深入淺出》之PSQL管理工具-高級命令(四) | http://www.sunline.cc/db/479559 |
| 《課程筆記:PostgreSQL深入淺出》之內存與進程(五) | http://www.sunline.cc/db/489936 |
| 《課程筆記:PostgreSQL深入淺出》之外存&永久存儲(六) | http://www.sunline.cc/db/502267 |
| Oracle: | URL |
| 《Oracle 自動收集統計信息機制》 | http://www.sunline.cc/db/403670 |
| 《Oracle_索引重建—優化索引碎片》 | http://www.sunline.cc/db/399543 |
| 《DBA_TAB_MODIFICATIONS表的刷新策略測試》 | http://www.sunline.cc/db/414692 |
| 《FY_Recover_Data.dbf》 | http://www.sunline.cc/doc/74682 |
| 《Oracle RAC 集群遷移文件操作.pdf》 | http://www.sunline.cc/doc/72985 |
| 《Oracle Date 字段索引使用測試.dbf》 | http://www.sunline.cc/doc/72521 |
| 《Oracle 診斷案例 :因應用死循環導致的CPU過高》 | http://www.sunline.cc/db/483047 |
| 《Oracle 慢SQL監控腳本》 | http://www.sunline.cc/db/479620 |
| 《Oracle 慢SQL監控測試及監控腳本.pdf》 | http://www.sunline.cc/doc/76068 |
| 《Oracle 腳本實現簡單的審計功能》 | http://www.sunline.cc/db/450052 |
| Greenplum: | URL |
| 《PL/Java.pdf》 | http://www.sunline.cc/doc/70867 |
| 《GP的資源隊列.pdf》 | http://www.sunline.cc/doc/67644 |
| 《Greenplum psql客戶端免交互執行SQL.pdf》 | http://www.sunline.cc/doc/69806 |




