索引類似與書的目錄結構,可以根據目錄中的頁碼快速找到需要的內容。
索引是乙個單獨的、物理的資料庫結構,它是某個表中一列或者幾列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。使用索引可以快速訪問資料庫表中的特定資訊。
oracle
自動維護索引,插入、刪除、更新表中資料時,自動更新索引。
當建立primarykey(主鍵)
或者unique constraint(
唯一約束
)時,唯一索引將被自動建立。顧名思義,建立唯一索引的字段上不能存在兩個或兩個以上的相同的值。
b樹索引在
oracle
中是乙個通用索引。在建立索引時它就是預設的索引型別。
b樹索引可以是乙個列的(簡單
)索引,也可以是組合/復合
(多個列
)的索引。
b樹索引最多可以包括
32列。
b樹索引的儲存示意圖如下:
樹葉塊包含了索引值、
rowid
,以及指向前乙個和後乙個樹葉塊的指標。
oracle
可以從兩個方向遍歷這個二叉樹。
b樹索引儲存了在索引列上有值的每個資料行的
rowid
值。oracle
不會對索引列上包含
null
值的行進行索引。如果索引是多個列的組合索引,而其中列上包含
null
值,這一行就會處於包含
null
值的索引列中,且將被處理為空(視為
null)
。索引列的值都儲存在索引中。因此,可以建立乙個組合(復合
)索引,這些索引可以直接滿足查詢,而不用訪問表。這就不用從表中檢索資料,從而減少了
i/o量。
位圖索引非常適合於聯機分析處理
olap
,它們不應該用於通過事務處理應用程式訪問的表。它們可以使用較少到中等基數
(不同值的數量
)的列訪問非常大的表。儘管位圖索引最多可達
30個列,但通常它們都只用於少量的列。
例如,您的表可能包含乙個稱為
***的列,它有兩個可能值:男和女。這個基數只為
2,如果使用者頻繁地根據
***列的值查詢該錶,這就是位圖索引的基列。當乙個表內包含了多個位圖索引時,您可以體會到位圖索引的真正威力。如果有多個可用的點陣圖索引,
oracle
就可以合併從每個位圖索引得到的結果集,快速刪除不必要的資料。
bitmapt
特點:適合與決策支援系統;
做update
代價非常高;
非常適合
or操作符的查詢;
基數比較少的時候才能建位圖索引;
技巧:對於有較低基數的列需要使用位圖索引。性別列就是這樣乙個例子,它有兩個可能值:男或女
(基數僅為
2)。位圖對於低基數
(少量的不同值
)列來說非常快,這是因為索引的尺寸相對於
b樹索引來說小了很多。因為這些索引是低基數的
b樹索引,所以非常小,因此您可以經常檢索表中超過半數的行,並且仍使用位圖索引。
當大多數條目不會向位圖新增新的值時,位圖索引在批處理
(單使用者
)操作中載入表
(插入操作
)方面通常要比
b樹做得好。當多個會話同時向表中插入行時不應該使用位圖索引,在大多數事務處理應用程式中都會發生這種情況。
select * from user_indexes whereindex_name='index_name'
索引的建立語法:
create uniuqe | bitmap |normal
index.
on .
(| asc | desc,| asc | desc,...)
tablespace
storage
logging | nologging
compute statistics
nocompress | compress
nosort | reverse
partition | global partition
invisible | visible
其中:unique | bitmap |
normal
:指定unique為唯一值索引,bitmap 為位圖索引,normal可以省略,為b-tree索引。
schema
:oracle
模式,預設即為當前帳戶。
index name
:索引名。
table_name
:建立索引的基表名。
|asc|desc
:可以對多列進行聯合索引,當為expression時即―基於函式的索引。long列、long raw列不能建索引列。
tablespace
:指定存放索引的表空間(索引和原表不在乙個表空間時效率更高)。
storage
:可進一步設定表空間的儲存引數 。
logging|nologging
:是否對索引產生重做日誌(對大表盡量使用nologging來減少占用空間並提高效率)。
compute statistics
:建立新索引時收集統計資訊。
nocompress|compress
:是否使用―鍵壓縮‖(使用鍵壓縮可以刪除乙個鍵列中出現的重複值)。
nosort | reverse
:nosort表示與表中相同的順序建立索引,reverse表示相反順序儲存索引值。
partition | nopartition
:可以在分割槽表和未分割槽表上對建立的索引進行分割槽。
invisible| visible:在
oracle 11g
裡新增的新的特性來索引不可見(index invisible),當索引被設為不可見後,實際上就是指該索引對於優化器不可見,但是不影響正常的更新。
例如:create
index
inx_pst_schemeid
onpm_scheme_item_flat
(rpt_scheme_id
,year_mon)
tablespace
edmdata2
pctfree10
initrans2
maxtrans
255
storage (
initial64k
next1m
minextents1
maxextents
unlimited )
compress
visible;
索引修改的語法:
alter [unique] index .<
indexname
>
[initrans n]
[maxtrans n]
rebuild
[storage n]
其中:rebuild
是 根據原來的索引結構重新建立索引,實際是刪除原來的索引後再重新建立。
當不需要時可以將索引刪除以釋放出硬碟空間。命令如下:
drop index [schema.]indexname
例如:sql>drop index inx_pst_schemeid;
index dropped
注:當表結構被刪除時,有其相關的所有索引也隨之被刪除。
ORACLE索引介紹
什麼是索引 索引是建立在表的一列或多個列上的輔助物件,目的是加快訪問表中的資料 oracle儲存索引的資料結構是b 樹,位圖索引也是如此,只不過是葉子節點不同b 數索引 索引由根節點 分支節點和葉子節點組成,上級索引塊包含下級索引塊的索引資料,葉節點包含索引資料和確定行實際位置的rowid。使用索引...
Oracle 索引介紹
oracle 建立索引要做到三個適當 即 b 在適當的表上 b b 適當的列上 b 建立 b 適當數量 b 的索引。具體的來說,要做到這個三個適當有如下幾個要求。一 根據表的大小來建立索引 雖然給表建立索引,可以提高查詢的效率。但是資料庫管理員需要注意的是,索引也需要一定的開銷的。為此並不是說給所有...
Oracle索引介紹
缺省級別的索引就是 b tree 查詢順序 先查詢各個節點和索引的葉節點,然後再查詢表自身的行資料.注意 1.這就是有時候oracle優化器會全表掃瞄,而不是查詢索引,因為全表掃瞄有時候更快.2.如果所有是建立在多個列的時候,那麼第一列leading column非常重要 3.假設有乙個多列索引 級...