初識oracle中的索引組織表

2021-05-10 03:30:30 字數 2474 閱讀 5150

索引組織表(

iot)有一種類

b樹的儲存組織方法。普通的堆組織表是以一種無序的集合儲存。而

iot中的資料是按主鍵有序的儲存在

b樹索引結構中。與一般

b樹索引不同的的是,在

iot中每個葉結點即有每行的主鍵列值,又有那些非主鍵列值。

如下圖所示,在

iot所對應的

b樹結構中,每個索引項包括

<

主鍵列值,非主鍵列值

>

而不是rowid

,對於普通堆組織表,

oracle

會有對應的索引與之對應,且分開儲存。換句話說,

iot即是索引,又是實際的資料。

普通表索引與表資料的對應關係

iot的索引項和表資料的對應關係

iot 和普通表對於應用程式來說,例如

sql 查詢語句,是沒有區別的。也就是說

oracle

中對錶的組織形式對應用來說是透明的。

下表總結了

iot 與一般表的區別:

普通表

iot

rowid

唯一確定一行錄

主鍵唯一確定一行記錄

可以不指定主鍵

必須指定主鍵

rowid

偽列中儲存物理

rowid

,可以構建二級索引

rowid

偽列中儲存邏輯

rowid

,可以構建二級索引 基於

rowid

進行訪問

基於邏輯

rowid

進行訪問

順序掃瞄才能得到所有行

只須掃瞄索引即可返回所有行

可以和其它表一起聚集儲存

不能儲存為聚集表

可以包含

long

和lob 型別的列

可以包含

lob 型別但不可以包括

long

型別的列

使用iot

的好處: 1

、由於索引項和資料儲存在一起,所以無論是基於主鍵的等值查詢還是範圍查詢都能大大節省磁碟訪問時間。 2

、為了能夠更快地訪問那些頻繁訪問的列,可以使用溢位儲存選項將那些訪問不頻繁的列放在

b 樹葉結點資料塊之外的溢位堆空間中。這樣一來便可以得到更小的

b 樹,以及包含更多行的葉結點 3

、和堆組織表和索引不同,主鍵不需要被儲存兩次。 4

、rowid

偽列是基於主鍵值的邏輯

rowid

,而不是物理

rowid

,即使表被重新組織過,造成了基錶行的遷移,二級索引仍然可用,不需要重建。

注: 1 、

oracle

使用rowid

資料型別儲存行位址

,rowid

可以分成兩種,分別適於不同的物件,

physical rowids

:儲存ordinary table,clustered table,table partition and subpartition,indexe,index partition and subpartition;

logical rowids :

儲存iot 的行位址 2

、每個表在

oracle

內部都有乙個

rowid

偽列, 它在所有

sql 中無法顯示,不佔儲存空間

; 它用於從表中查詢行的位址或者在

where

中進行參照

, 乙個例子如下:

select rowid, last_name from employees;         

oracle

內部使用保留在

rowid

偽列中的值構建索引結構

,rowid

偽列不儲存在資料庫中

, 它不是資料庫表的資料

, (從

database

及table

的邏輯結構來說)。事實上

, 在物理結構上

, 每行由乙個或多個

row pieces

組成, 每個

row piece

的頭部包含了這個

piece

的address,

即rowid.

從這個意義上來說,

rowid

還是佔了磁碟空間的.

3 、二級索引:

也可理解為聚集索引,好比是我們人查字典時自已會使用的索引。

oracle中的索引組織表與堆組織表

建立乙個emp表 sql create table emp asselect object id empno,object name ename,created hiredate,owner job from all objects 受影響的行 53759 4.172ms sql解析 查詢all o...

oracle中的索引組織表與堆組織表

建立乙個emp表 sql create table emp asselect object id empno,object name ename,created hiredate,owner job from all objects 受影響的行 53759 4.172ms sql解析 查詢all o...

oracle中的索引組織表與堆組織表

建立乙個emp表 sql create table emp asselect object id empno,object name ename,created hiredate,owner job from all objects 受影響的行 53759 4.172ms sql解析 查詢all o...