索引是若干數據行的關鍵字的列表,查詢數據時,通過索引中的關鍵字可以快速定位到要訪問的記錄所在的數據塊,從而大大減少讀取數據塊的I/O次數,因此可以顯著提高性能。
索引的原理
下面通過查詢數據表“scott.student”的ROWID列為例,在【SQLPlus Worksheet】中執行下面的語句,查詢結果如圖7.38所示。
―――――――――――――――――――――――――――――――――――――
select rowid,student_id,name,professional,birthday,director_id from scott.student;
―――――――――――――――――――――――――――――――――――――
【參見光盤文件】:\第7章\ selectrowid.sql。
以數據表“scott.student”的索引為例,下面的數據就是以“student_id”數據列為例建立索引後的部分數據。
―――――――――――――――――――――――――――――――――――――
ROWID STUDENT_ID
------------------ ----------
AAAH2oAAIAAAABSAAA 20020101
AAAH2oAAIAAAABSAAJ 20020102
AAAH2oAAIAAAABSAAK 20020103
AAAH2oAAIAAAABSAAL 20020104
AAAH2oAAIAAAABSAAN 20030102
AAAH2oAAIAAAABSAAO 20030103
AAAH2oAAIAAAABSAAP 20030104
―――――――――――――――――――――――――――――――――――――
Oracle 9i支持的索引
Oracle 9i中的索引可以分為兩大類:B-樹索引和位圖索引。
表7.9 B-樹索引的分類 名稱含義Non-Unique非惟一索引,默認的B-樹索引,索引列值可以不是惟一的Unique惟一索引,在創建索引時指定“UNIQUE”關鍵字可以創建惟一索引。當建立“主碼約束條件”時也會建立惟一索引,索引列值是惟一的Reverse Key反向關鍵字索引,通過在創建索引時指定“REVERSE”關鍵字,可以創建反向關鍵字索引,被索引的每個數據列中的數據都是反向存儲的,但仍然保持原來數據列的次序Function-based基於函數的索引,對數據列使用表達式,按照表達式結果來創建B-樹索引的各節點,適合特定的,經常使用該表達式進行類似查詢的數據表的索引的組織
2. 位圖索引
對“scott.student”數據表的數據列“professional”建立位圖索可能的實例如下。
―――――――――――――――――――――――――――――――――――――
記錄號 professional取值 位圖索引值
1 軟件工程 1
2 計算機安全 2
3 圖形圖像 3
7 Web安全 2
―――――――――――――――――――――――――――――――――――――
主碼自動建立的索引
(1)如圖7.40所示。
(2)出現如圖7.41所示的編輯索引的【一般信息】選項卡。
如何創建索引
(1)如圖7.42所示。
(2)出現如圖7.43所示的創建索引的【一般信息】選項卡。
(3)切換到圖7.44所示的創建索引的【分區】選項卡。
(4)切換到圖7.45所示的創建索引的【存儲】選項卡。
(5)切換到圖7.46所示的創建索引的【選項】選項卡。
(6)成功創建索引後出現如圖7.47所示界面。
(7)在【企業管理器】中可以查看創建的索引,如圖7.48所示。
(8)上述創建索引對應的SQL代碼如下。
―――――――――――――――――――――――――――――――――――――
CREATE INDEX "SCOTT"."姓名字段索引"
ON "SCOTT"."STUDENT"("NAME")
TABLESPACE "INDX";
―――――――――――――――――――――――――――――――――――――
【參見光盤文件】:\第7章\ createindex.sql。
(9)讀者也可以直接在【SQLPlus Worksheet】中執行createindex.sql文件完成索引的創建,如圖7.49所示。
如何刪除索引
(1)如圖7.50所示。
(2)出現如圖7.51所示的【索引刪除確認】界面。