国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

初識oracle中的索引組織表

2024-08-29 13:53:39
字體:
來源:轉載
供稿:網友
 索引組織表(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、二級索引:也可理解為聚集索引,好比是我們人查字典時自已會使用的索引。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奇台县| 高台县| 斗六市| 屏东县| 依安县| 长治市| 北川| 元江| 广水市| 五常市| 镇原县| 阿城市| 伊金霍洛旗| 东明县| 西充县| 岢岚县| 比如县| 尼勒克县| 明水县| 昌黎县| 屯留县| 恩平市| 吴桥县| 巧家县| 开原市| 康平县| 新河县| 凉城县| 星子县| 拉萨市| 腾冲县| 炎陵县| 宜宾县| 三穗县| 炉霍县| 介休市| 多伦县| 邮箱| 广昌县| 福清市| 新郑市|