初識
oracle
中的索引組織表
???
索引組織表(
IOT
)有一種類
B
樹的存儲組織方法。普通的堆組織表是以一種無序的集合存儲。而
IOT
中的數(shù)據(jù)是按主鍵有序的存儲在
B
樹索引結(jié)構(gòu)中。與一般
B
樹索引不同的的是,在
IOT
中每個葉結(jié)點即有每行的主鍵列值,又有那些非主鍵列值。
如下圖所示,在
IOT
所對應的
B
樹結(jié)構(gòu)中,每個索引項包括
<
主鍵列值,非主鍵列值
>
而不是
ROWID
,對于普通堆組織表,
oracle
會有對應的索引與之對應,且分開存儲。換句話說,
IOT
即是索引,又是實際的數(shù)據(jù)。
???????????????????????????????
普通表索引與表數(shù)據(jù)的對應關(guān)系
?????????????????????????? ?
IOT
的索引項和表數(shù)據(jù)的對應關(guān)系
IOT
和普通表對于應用程序來說,例如
sql
查詢語句,是沒有區(qū)別的。也就是說
oracle
中對表的組織形式對應用來說是透明的。
??????
下表總結(jié)了
IOT
與一般表的區(qū)別:
?
?
普通表
|
IOT
|
ROWID
唯一確定一行錄
|
主鍵唯一確定一行記錄
|
可以不指定主鍵
|
必須指定主鍵
|
ROWID
偽列中保存物理
rowid
,可以構(gòu)建二級索引
|
ROWID
偽列中保存邏輯
rowid
,可以構(gòu)建二級索引
|
基于
rowid
進行訪問
|
基于邏輯
rowid
進行訪問
|
順序掃描才能得到所有行
|
只須掃描索引即可返回所有行
|
可以和其它表一起聚集存儲
|
不能存儲為聚集表
|
可以包含
long
和
lob
類型的列
|
可以包含
lob
類型但不可以包括
long
類型的列
|
?
使用
IOT
的好處:
1
、由于索引項和數(shù)據(jù)存儲在一起,所以無論是基于主鍵的等值查詢還是范圍查詢都能大大節(jié)省磁盤訪問時間。
2
、為了能夠更快地訪問那些頻繁訪問的列,可以使用溢出存儲選項將那些訪問不頻繁的列放在
B
樹葉結(jié)點數(shù)據(jù)塊之外的溢出堆空間中。這樣一來便可以得到更小的
B
樹,以及包含更多行的葉結(jié)點
3
、和堆組織表和索引不同,主鍵不需要被存儲兩次。
4
、
ROWID
偽列是基于主鍵值的邏輯
rowid
,而不是物理
rowid
,即使表被重新組織過,造成了基表行的遷移,二級索引仍然可用,不需要重建。
?
注:
1
、
Oracle
使用
rowid
數(shù)據(jù)類型存儲行地址
,rowid
可以分成兩種,分別適于不同的對象,
Physical rowids
:存儲
ordinary table,clustered table,table partition and subpartition,indexe,index partition and subpartition;
Logical rowids :
存儲
IOT
的行地址
2
、每個表在
oracle
內(nèi)部都有一個
ROWID
偽列
,
它在所有
sql
中無法顯示,不占存儲空間
;
它用于從表中查詢行的地址或者在
where
中進行參照
,
一個例子如下:
???
SELECT ROWID, last_name FROM employees;?????????
Oracle
內(nèi)部使用保留在
ROWID
偽列中的值構(gòu)建索引結(jié)構(gòu)
,rowid
偽列不存儲在
數(shù)據(jù)庫
中
,
它不是數(shù)據(jù)庫表的數(shù)據(jù)
,
(從
database
及
table
的邏輯結(jié)構(gòu)來說)。事實上
,
在物理結(jié)構(gòu)上
,
每行由一個或多個
row pieces
組成
,
每個
row piece
的頭部包含了這個
piece
的
address,
即
rowid.
從這個意義上來說,
rowid
還是占了磁盤空間的
.
3
、二級索引:
也可理解為聚集索引,好比是我們?nèi)瞬樽值鋾r自已會使用的索引。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
