首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 9i 索引技術深度解析:原理、B-Tree/位圖分類、創建刪除實戰與主鍵自動索引

     編輯:Oracle 資料庫相關知識

索引原理

索引存儲 (Key, ROWID) 鍵值對,查詢時先定位 Key 再通过 ROWID 直接讀取數據塊,大幅減少 I/O。示例:scott.student 以 STUDENT_ID 建立索引後的邏輯視圖:

ROWID                  STUDENT_ID
------------------     ----------
AAAH2oAAIAAAABSAAA     20020101
AAAH2oAAIAAAABSAAJ     20020102
...

驗證 SQL:SELECT ROWID, student_id,... FROM scott.student; 截圖見圖。

Oracle 9i 索引分類

B-Tree 索引 (默認)

類型關鍵字特點
Non-Unique默認允許重複鍵值
UniqueCREATE UNIQUE INDEX鍵值唯一,主鍵/唯一約束自動創建
Reverse KeyREVERSE鍵值字節反轉存儲,緩解右側熱塊爭用
Function-Based表達式索引函數結果,如 UPPER(name),加速特定查詢

分類示意圖:

位圖索引

適用於低基數列 (如性別、專業),每個唯一值對應一個位圖,位為 1 表示行包含該值。示例:professional 列位圖結構:

記錄號  professional  位圖索引值
1       軟件工程      1
2       計算機安全    2
3       圖形圖像      3
7       Web安全       2

主鍵自動創建索引驗證

EM 編輯索引「一般信息」頁籤可見系統自動生成的主鍵索引名 (如 SYS_C001234) 及唯一屬性。截圖:

手動創建索引 (EM 向導)

  1. 右鍵「索引」→「創建」
  2. 「一般信息」:名稱 姓名字段索引、表 SCOTT.STUDENT、列 NAME、表空間 INDX
  3. 「分區/存儲/選項」:默認
  4. 生成 DDL:
CREATE INDEX "SCOTT"."姓名字段索引"
  ON "SCOTT"."STUDENT"("NAME")
  TABLESPACE "INDX";

腳本 createindex.sql,界面截圖:

刪除索引

右鍵索引 → 「刪除」確認,生成 DROP INDEX "SCOTT"."姓名字段索引";。截圖:

維護建議

  • 定期 ANALYZE INDEX ... VALIDATE STRUCTURE 檢查高度/葉塊利用率。
  • ALTER INDEX ... REBUILD [ONLINE] 消除碎片,ONLINE 避免鎖表。
  • 監控 V$OBJECT_USAGE 識別未用索引並刪除,減少 DML 開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved