以下的文章主要是介紹Oracle數據庫中索引的相關的維護,如果你對這Oracle數據庫中索引的相關的維護的實際操作與應用,心存好奇的話,以下的文章將會揭開它的神秘面紗。望你浏覽之後會有所收獲。
索引的選擇性=索引裡不同關鍵字的數目/表中行的總數:
- select i.distinct_keys/t.num_rows
- from
- user_indexes i,
- user_tables t
- where i.table_name='表名'
- and i.index_name='索引名'
- and i.table_name=t.table_name
- /
可以查詢USER_TAB_COLUMNS以了解每個列的選擇性
表中所有行在該列的不同值的數目:
- select
- column_name,
- num_distinct
- from user_tab_columns
- where table_name='表名'
- /
列的選擇性=NUM_DISTINCT/表中所有行的總數,查詢USER_TAB_COLUMNS有助測量每個列的選擇性,但它並不能精確地測量列的並置組合的選擇性。要想測量一組列的選擇性,需要采用手工方法或者根據這組列創建一個索引並重新分析表。
確定索引的實際碎片
隨著數據庫的使用,不可避免地對基本表進行插入,更新和刪除,這樣導致葉子行在索引中被刪除,使該索引產生碎片。插入刪除越頻繁的表,索引碎片的程度也越高。碎片的產生使訪問和使用該索引的I/O成本增加。碎片較高的索引必須重建以保持最佳性能。
(1)利用驗證索引命令對索引進行驗證。
這將有價值的索引信息填入index_stats表。
- validate index 用戶名.索引名
- /
(2)查詢index_stats表以確定索引中刪除的、未填滿的葉子行的百分比。
- select
- name,
- del_lf_rows,
- lf_rows,
- round((del_lf_rows/(lf_rows+0.0000000001))*100) "Frag Percent"
- from index_stats
- /
(3)如果索引的葉子行的碎片超過10%,考慮對索引進行重建。
- alter index 用戶名.索引名 rebuild
- tablespace 表空間名
- storage(initial 初始值 next 擴展值)
- nologging
- /
(4)如果出於空間或其他考慮,不能重建索引,可以整理索引。
- alter index用戶名.索引名 coalesce
- /
(5)清除分析信息
- analyze index 用戶名.索引名
- delete statistics
- /
上述的相關內容就是對Oracle數據庫中索引的維護的相關項目的描述,希望會給你帶來一些幫助在此方面。