Oracle數據庫索引的維護建站知識
導讀:1建站知識Oracle數據庫索引的維護seo網站優化個業網站建設公司。
正在看的ORACLE教程是:Oracle數據庫索引的維護。
本文只討論Oracle中最常見的索引,即是B-tree索引。本文中涉及的數據庫版本是Oracle8i。 一. 查看系統表中的用戶索引 在Oracle中,SYSTEM表是安裝數據庫時自動建立的,它包含數據庫的全部數據字典,存儲過程、包、函數和觸發器的定義以及系統回滾段。 一般來說,應該盡量避免在SYSTEM表中存儲非SYSTEM用戶的對象。因為這樣會帶來數據庫維護和管理的很多問題。一旦SYSTEM表損壞了,只能重新生成數據庫。我們可以用下面的語句來檢查在SYSTEM表內有沒有其他用戶的索引存在。 二. 索引的存儲情況檢查 Oracle為數據庫中的所有數據分配邏輯結構空間。數據庫空間的單位是數據塊(block)、范圍(extent)和段(segment)。 Oracle數據塊(block)是Oracle使用和分配的最小存儲單位。它是由數據庫建立時設置的DB_BLOCK_SIZE決定的。一旦數據庫生成了,數據塊的大小不能改變。要想改變只能重新建立數據庫。(在Oracle9i中有一些不同,不過這不在本文討論的范圍內。) Extent是由一組連續的block組成的。一個或多個extent組成一個segment。當一個segment中的所有空間被用完時,Oracle為它分配一個新的extent。 Segment是由一個或多個extent組成的。它包含某表空間中特定邏輯存儲結構的所有數據。一個段中的extent可以是不連續的,甚至可以在不同的數據文件中。 一個object只能對應于一個邏輯存儲的segment,我們通過查看該segment中的extent,可以看出相應object的存儲情況。 (1)查看索引段中extent的數量: (2)查看表空間內的索引的擴展情況: 三. 索引的選擇性 索引的選擇性是個業網站建設公司指索引列中不同值的數目與表中記錄數的比。如果一個表中有2000條記錄,表索引列有1980個不同的值,那么這個索引的選擇性就是1980/2000=0.99。 一個索引的選擇性越接近于1,這個索引的效率就越高。 如果是使用基于cost的最優化,優化器不應該使用選擇性不好的索引。如果是使用基于rule的最優化,優化器在確定執行路徑時不會考慮索引的選擇性(除非是唯一性索引),并且不得不手工優化查詢以避免使用非選擇性的索引。 確定索引的選擇性,可以有兩種方法:手工測量和自動測量。 (1)手工測量索引的選擇性 如果要根據一個表的兩列創建兩列并置索引,可以用以下方法測量索引的選擇性: 列的選擇性=不同值的數目/行的總數 /* 越接近1越好 */ 如果我們知道其中一列索引的選擇性(例如其中一列是主鍵),那么我們就可以知道另一列索引的選擇性。 手工方法的優點是在創建索引前就能評估索引的選擇性。 (2)自動測量索引的選擇性 如果分析一個表,也會自動分析所有表的索引。 第一,為了確定一個表的確定性,就要分析表。 第二,確定索引里不同關鍵字的數目: 第三,確定表中行的總數: 第四,索引的選擇性=索引里不同關鍵字的數目/表中行的總數: 第五,可以查詢USER_TAB_COLUMNS以了解每個列的選擇性。 表中所有行在該列的不同值的數目: 列的選擇性=NUM_DISTINCT/表中所有行的總數,查詢USER_TAB_COLUMNS有助測量每個列的選擇性,但它并不能精確地測量列的并置組合的選擇性。要想測量一組列的選擇性,需要采用手工方法或者根據這組列創建一個索引并重新分析表。 四. 確定索引的實際碎片 隨著數據庫的使用,不可避免地對基本表進行插入,更新和刪除,這樣導致葉子行在索引中被刪除,使該索引產生碎片。插入刪除越頻繁的表,索引碎片的程度也越高。碎片的產生使訪問和使用該索引的I/O成本增加。碎片較高的索引必須重建以保持最佳性能。 (1)利用驗證索引命令對索引進行驗證。 這將有價值的索引信息填入index_stats表。 (2)查詢index_stats表以確定索引中刪除的、未填滿的葉子行的百分比。 (3)如果索引的葉子行的碎片超過10%,考慮對索引進行重建。 (4)如果出于空間或其他考慮,不能重建索引,可以整理索引。 (5)清除分析信息
聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-22 ,文章Oracle數據庫索引的維護建站知識主要講述索引,標簽,Oracle數據庫索引的維護建站知識1網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_5257.html
- 上一篇:oracle 刪除重復數據建站知識
- 下一篇:增加反向鏈接的35個技巧建站知識