Oracle的分割槽索引技術

Jujay發表於2011-12-23
在Oracle中,和表一樣,索引也可以分割槽。有兩種型別的分割槽索引,區域性分割槽索引和全域性分割槽索引。
1. 區域性分割槽索引
區域性分割槽索引使用LOCAL關鍵字建立,其分割槽邊界與表相同,即與每個表分割槽相關聯的都有一個索引分割槽,下面是個區域性分割槽索引的例子:
create table sales_par
partitioned by range (year)
( partition p_2009 values less than (2010)
  partition p_2010 values less than (2011),
  partition p_2011 values less than (2012),
  partition p_2012 values less than (2013)
)
as select * from sales;
--建立區域性分割槽索引
create index sales_idx1 on sales_par (product,year) local;
如果區域性分割槽索引包含分割槽鍵列並且謂詞條件包含分割槽鍵列,執行計劃通常僅需要訪問一個或很少的索引分割槽,這種特性叫分割槽消除(Partition Elimination),分割槽消除可以有效地減少掃描資料塊,提高查詢效能,如:
--查詢1:
select * from sales_par where product = 'CPU' and year = 2011;
--查詢2:
select * from sales_par where product = 'CPU';
上例中,查詢1的謂詞條件包含分割槽鍵值,因此可以利用分割槽消除減少掃描的分割槽數(該例中只需要掃描分割槽p_2011);而查詢2的謂詞條件不包含分割槽鍵值,因此無法利用分割槽消除。
區域性分割槽索引除了分割槽消除,還具有表可用性更好這個優點,當對某個表分割槽進行DROP或MERGE操作後,Oracle會自動對所對應的索引分割槽進行相同的操作,不需要rebuild,即維護操作可以在獨立分割槽進行。

2. 全域性分割槽索引
全域性分割槽索引使用GLOBAL關鍵字建立,索引的分割槽邊界與表的分割槽邊界不一定匹配,且表和索引的分割槽鍵也可以不一樣。下面是一個全域性分割槽索引的例子:
create index sales_idx2 on sales (year)
global partition by range (year)
( partition p_2010 values less than (2011),
  partition p_2012 values less than (2013)
);
在上例中,雖然表和索引的分割槽鍵是一樣的,但是它們的分割槽邊界不一樣,所以屬於全域性分割槽索引。全域性分割槽索引的優點是索引分割槽和表分割槽無關,比較靈活;但是它的缺點是對全域性分割槽索引的任何維護都將需要獲得對錶的較高層級的鎖,從而降低應用的可用性。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26277071/viewspace-713863/,如需轉載,請註明出處,否則將追究法律責任。

相關文章