教你如何成為Oracle 10g OCP - 第九章 物件管理(4)
9.4.1.2 索引組織表(IOT: Index Organized Table)
我們知道普通表都是以堆(heap)的方式來組織的,是無序的組織方式,
Oracle還提供了一種有序的表,叫做索引組織表,簡稱IOT表。 IOT表
上必須要有主鍵,IOT本身不對應segment, 表中所有的資料都存放在主
鍵所在索引的葉子節點中。也就是說,在索引葉子節點裡的索引條目裡,
不僅存放了被索引的列的值,還存放了其他列的值。
對於總的透過主鍵訪問資料的表來說,比較適合使用IOT表,因為如果
使用普通表,透過主鍵索引訪問表時,至少要讀取兩個資料塊,一個是
索引塊,一個是表的資料塊。但是透過IOT表,因為表的資料就存放在
索引塊中,只需要讀取一個塊即可。
IOT表是虛擬表,不過它具有普通表所有的特性,儘管IOT表的資料實際
存放在主鍵索引segment中,但是我們還是可以在IOT表的其他列上再次
建立索引,這種索引我們叫做二級索引。
建立IOT表:
CREATE TABLE DFMS.TEST08
(
OWNER VARCHAR2(30 BYTE),
OBJECT_NAME VARCHAR2(128 BYTE),
SUBOBJECT_NAME VARCHAR2(30 BYTE),
OBJECT_ID NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE VARCHAR2(19 BYTE),
CREATED DATE,
LAST_DDL_TIME DATE,
TIMESTAMP VARCHAR2(19 BYTE),
STATUS VARCHAR2(7 BYTE),
TEMPORARY VARCHAR2(1 BYTE),
GENERATED VARCHAR2(1 BYTE),
SECONDARY VARCHAR2(1 BYTE),
CONSTRAINT PK_IOT_TEST PRIMARY KEY (OBJECT_ID))
ORGANIZATION INDEX
TABLESPACE LOG_IDX
PCTTHRESHOLD 10
INCLUDING OBJECT_TYPE
OVERFLOW TABLESPACE LOG_DATA ;
假設經常需要返回的列是object_id前面的幾列,則如果將object_id
後面的幾列也放入索引塊中的話,會比較浪費空間,於是我們可以透過
設定pctthreshold及including屬性,從而只在索引塊中存放object_id
及前面的欄位,後面的存在所謂overflow中(overflow是一種segment).
pctthreshold: object_id及前面的欄位總大小是200 Bytes, 索引塊
大小是8KB, 那麼 200/8192=2.4% ,可以設定為3 .
including object_type 表示從object_type開始後面所有的列都放入
overflow中(包括object_type)。
pctthreshold和including比較,pctthreshold優先順序比較高,如果實際
值已經超過了pctthreshold,那麼沒有指定放入overflow的列也會放入
overflow .
9.4.1.3 簇表(Cluster Table)
對於簇表,總是要先建立簇段(cluster segment),然後將表關聯到cluster
segment, 它也是虛擬表,沒有對應的segment, 簇表對應的是cluster
segment。 型別有兩種: 索引簇表和雜湊簇表 。
索引簇表中,簇上必須有一個索引。它主要用於總是進行主明細表關聯查詢
的表,主表和明細表根據關聯欄位,將資料同時放入同一個簇資料塊中,即
一個資料塊存放了兩個表的記錄,當關聯查詢時只需要掃描一個塊即可,
示例如下:
a. 建立簇段 :
create cluster orders(ordno number) ;
b. 建立簇上的索引:
create index idx_orders on cluster orders ;
c. 建立表,並關聯到cluster .
主表:
create table order_master (ordno number, cstid number,createdate date)
cluster orders (ordno);
明細表:
create table order_item (ordno number, skuid number, qty number)
cluster orders (ordno);
雜湊簇表中,則是將表的記錄插入簇段的時候,對簇所在的列運用雜湊函式,
從而得到記錄所在的資料塊的位置,不能那個關聯多個表,只能將一個表關聯
到雜湊簇段中。
create cluster phone_cst(phone_no number) hashkeys 1000 size 50 ;
備註: phone_no值最多不超過1000,每個hashkeys能使用的空間大小是50位元組 .
create table phones(phone_no number, name varchar2(10)) cluster phone_cst(phone_no);
9.4.1.4 臨時表(Temporary Table)
臨時表存放的資料都是暫時使用的,用完後需要刪除的,臨時表的資料是"session"
專用的,當前session只能看到它自己修改的資料,即使其他session提交了它們自己
的DML操作。臨時表就好像每個session單獨使用一樣。
因為臨時表的資料就像session專用一樣,因此也就不需要消耗DML鎖資源,建立好臨時
表以後,還可以在臨時表上建立索引,約束及觸發器等。
Oracle自動清除臨時表中資料的兩種方式:
a. 退出session時,即使用者終端資料庫連線時,自動清除與該session相關的資料,
透過 on commit preserve rows 設定 。
b. 使用者提交或回滾時,自動清除與該session相關的,位於臨時表中的資料。透過
短語 on commit delete rows 設定。
例子:
CREATE GLOBAL TEMPORARY TABLE DFMS.SYS_T_OTS_TRACE_DETAIL
(
SYSSERIALNO VARCHAR2(25 BYTE),
NEXTEVENT VARCHAR2(35 BYTE),
SPAM_FLAG VARCHAR2(1 BYTE),
HOLD_STN VARCHAR2(25 BYTE)
)
ON COMMIT PRESERVE ROWS
NOCACHE;
CREATE INDEX DFMS.IDX1_T_OTS_TRACE_DETAIL ON DFMS.SYS_T_OTS_TRACE_DETAIL
(SYSSERIALNO);
我們可以透過user_tables檢視檢視DURATION欄位,如果是SYS$SESSION說明是
session中斷時刪除資料,而SYS$TRANSACTION 則表示提交或回滾時刪除資料。
下一節 : 索引
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-686408/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 教你如何成為Oracle 10g OCP - 第九章 物件管理Oracle 10g物件
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(2)Oracle 10g物件
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(3)Oracle 10g物件
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(5) - 索引Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(11) - 管理索引,sequence及resumableOracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(8) - 如何重建B樹索引Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(9) - 點陣圖(Bitmap)索引Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(10) - 點陣圖(Bitmap)索引Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(6) - B樹索引的訪問Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(9) - 重建索引對效能的影響Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(7) - B樹索引的對於DELETE的管理Oracle 10g物件索引delete
- 教你如何成為Oracle 10g OCP - 第十六章 ASM管理Oracle 10gASM
- 教你如何成為Oracle 10g OCP - 第六章 儲存管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第二十章 安全Oracle 10g
- 教你如何成為Oracle 10g OCP - 第七章 undo表空間管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十五章 自動化管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十四章 閃回Oracle 10g
- 【刪除】教你如何成為Oracle 10g OCP - 第十五章 自動化管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第一章學習Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十三章 RMAN管理的備份與恢復Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十九章 資料遷移Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十二章 手工管理的備份與恢復Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十一章 配置網路環境Oracle 10g
- 教你如何成為Oracle 10g OCP - 第五章 記憶體元件與Oracle程式Oracle 10g記憶體元件
- 教你如何成為Oracle 10g OCP - 第八章 使用者、許可權和角色管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第三章 資料字典學習Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十三章補充:RMAN的組成及工作原理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第八章 使用者、許可權和角色管理01Oracle 10g
- 教你如何成為Oracle 10g OCP - 第二十一章 全球化支援Oracle 10g
- 教你如何成為Oracle 10g OCP - 第二章學習 安裝及建庫Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十章 閂鎖、鎖定和併發性Oracle 10g
- 教你如何成為Oracle 10g OCP - 第四章 初始化引數和例項Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十三章補充:RMAN備份使用PGA還是SGAOracle 10g
- 教你如何成為Oracle 10g OCP - 第十三章補充:RMAN為什麼不備份online redoOracle 10g
- 準備看看這本書 - ORACLE資料庫技術實用詳解:教你如何成為10g OCPOracle資料庫
- oracle 10g rac轉成單機4Oracle 10g
- Oracle OCP(27):使用資料字典檢視管理物件Oracle物件
- 教你如何成為Eclipse熱鍵高手Eclipse