2021年5月26日 星期三

9.5 Index Organized Table

Oracle Index Organized Table (IOT) 是屬於一個特殊形態的 Table ,它同時具有 Table 與 Index 的特性。 Table 的特性是只有存放資料 (Data) ,而 Index 的特性是除了存放欄位資料外,還同時存放此筆資料所對應的 ROWID , ROWID 表示資料存放在 Data File 上的實體位置,也因此透過 Index 的查詢會比較快;而 IOT 則是除了存放 Data 外也存放 Key Column 的 ROWID ,是一個同時具有 Table 與 Index 特性的物件。


IOT 必須要有 Primary Key ,而 Key Column 的 ROWID 就存放在本身的 Table 當中,建立 Table 時使用 ORGANIZATION INDEX 就表示建立為 IOT :

SQL> create table useriot (user_id number, user_name varchar2(20), user_dep varchar2(20), constraint pk_id primary key (user_id)) organization index tablespace iot_ts pctthreshold 20 overflow tablespace iot_o_ts;


其中 PCTTHRESHOLD 表示每一筆 Row Data 所要保留 Block 空間的百分比,有點類似於 PCTUSED ,若資料大小超過 Block 所能存放的大小,則 Key Column 存放在原本的 Tablespace ,其餘存放在 Overflow Tablespace。


若一個 Table 的特性是只有建立 Primary Key ,且所應用的查詢都是會用到 Primary Key ,則此 Table 的特性很適合建立成 IOT ,好處是 IOT 本身已經存放 ROWID ,查詢不需要透過 Index 找到 ROWID 後再去迴表反查 Table 的其他資料,效率上會比使用 Index 的 Primary Key 來得好,同時 IOT 不需要再額外建立 Unique Index ,可以減少建立 Index 所消耗的空間。


但若是一個 Table 除了 Primary Key 之外,其它欄位也會建立 Index ,而且查詢不一定會用到 Primary Key ,那麼就不適合建立為 IOT ,在 IOT 上再建立其它 non-unique Index ,使用的效能上不會比一般的 Table 來得好。





沒有留言:

張貼留言