主鍵local索引、unique local索引、分割槽索引順序的理解
CREATE TABLE TEST1 (hid number,hid2 number,hchar1 char(50))
PARTITION BY RANGE(hid) INTERVAL (10)
( PARTITION p01 VALUES LESS THAN (5));
主鍵不加USING INDEX LOCAL預設是全域性索引
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid) --全域性索引;
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid) USING INDEX LOCAL;
主鍵是非分割槽欄位
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2) --正常執行;
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2) USING INDEX LOCAL --報錯ORA-14039: 分割槽列必須構成 UNIQUE 索引的關鍵字列子集;
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2,hid) USING INDEX LOCAL --正常執行;
unique索引是非分割槽欄位
create unique index pk_ID on TEST1(HID2) local--報錯ORA-14039: 分割槽列必須構成 UNIQUE 索引的關鍵字列子集;
create unique index pk_ID on TEST1(HID2,HID) local --正常執行;
create unique index pk_ID on TEST1(HID2) --正常執行;
alter table TEST1 add constraint pk_ID2 primary key(HID2) using index pk_ID --正常執行;
create index pk_ID99 on TEST1(HID2) local --正常執行;
alter table TEST1 add constraint pk_ID99_2 primary key(HID2) using index pk_ID99 --報錯ORA-14196: 指定的索引不能用於強制約束條件;
非分割槽欄位建立主鍵,則建立主鍵local索引時必須加上分割槽欄位
ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (主鍵欄位,分割槽欄位) USING INDEX LOCAL;
主鍵做local索引必須包含分割槽鍵的欄位。這和oracle 如何保證紀錄唯一有關,如果unique index key沒有partition_key,那麼每插入一行的紀錄,只保證它所進入的分割槽中是唯一的,不保證在整個表上這個記錄是否唯一,這就違背了主鍵的意義。(如果和分割槽欄位一起繫結,則不需要掃描所有的索引分割槽就能驗證整個表上這個記錄是否唯一)。
range分割槽,單個分割槽內非分割槽欄位的值不是順序的,分割槽欄位值也不是順序的(如按100值分割槽,第一個分割槽是1-100,順序可能是7,1,3,67,9這樣的,第二分割槽101-200,順序可能是199,136,103,178這樣的,但是相對兩個分割槽而言,第二個分割槽和第一個分割槽值的範圍是順序的)
分割槽欄位的分割槽索引是順序的,因為第一個資料分割槽開始到後面的資料分割槽是range順序的,雖然單獨的資料分割槽內資料不是順序的
非分割槽欄位只是某一分割槽索引內的索引是順序的,不代表分割槽索引是順序的。
PARTITION BY RANGE(hid) INTERVAL (10)
( PARTITION p01 VALUES LESS THAN (5));
主鍵不加USING INDEX LOCAL預設是全域性索引
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid) --全域性索引;
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid) USING INDEX LOCAL;
主鍵是非分割槽欄位
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2) --正常執行;
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2) USING INDEX LOCAL --報錯ORA-14039: 分割槽列必須構成 UNIQUE 索引的關鍵字列子集;
ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2,hid) USING INDEX LOCAL --正常執行;
unique索引是非分割槽欄位
create unique index pk_ID on TEST1(HID2) local--報錯ORA-14039: 分割槽列必須構成 UNIQUE 索引的關鍵字列子集;
create unique index pk_ID on TEST1(HID2,HID) local --正常執行;
create unique index pk_ID on TEST1(HID2) --正常執行;
alter table TEST1 add constraint pk_ID2 primary key(HID2) using index pk_ID --正常執行;
create index pk_ID99 on TEST1(HID2) local --正常執行;
alter table TEST1 add constraint pk_ID99_2 primary key(HID2) using index pk_ID99 --報錯ORA-14196: 指定的索引不能用於強制約束條件;
非分割槽欄位建立主鍵,則建立主鍵local索引時必須加上分割槽欄位
ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (主鍵欄位,分割槽欄位) USING INDEX LOCAL;
主鍵做local索引必須包含分割槽鍵的欄位。這和oracle 如何保證紀錄唯一有關,如果unique index key沒有partition_key,那麼每插入一行的紀錄,只保證它所進入的分割槽中是唯一的,不保證在整個表上這個記錄是否唯一,這就違背了主鍵的意義。(如果和分割槽欄位一起繫結,則不需要掃描所有的索引分割槽就能驗證整個表上這個記錄是否唯一)。
range分割槽,單個分割槽內非分割槽欄位的值不是順序的,分割槽欄位值也不是順序的(如按100值分割槽,第一個分割槽是1-100,順序可能是7,1,3,67,9這樣的,第二分割槽101-200,順序可能是199,136,103,178這樣的,但是相對兩個分割槽而言,第二個分割槽和第一個分割槽值的範圍是順序的)
分割槽欄位的分割槽索引是順序的,因為第一個資料分割槽開始到後面的資料分割槽是range順序的,雖然單獨的資料分割槽內資料不是順序的
非分割槽欄位只是某一分割槽索引內的索引是順序的,不代表分割槽索引是順序的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2144878/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分割槽索引之本地(local index)索引和全域性索引(global index)索引Index
- 轉個分割槽表Local索引Rebuild的總結索引Rebuild
- 操作分割槽表對global和local索引的影響索引
- 【eygle】Oracle的分割槽表和Local索引建立與維護Oracle索引
- 關於分割槽表Local索引Rebuild的一些總結索引Rebuild
- oracle索引詳解 分割槽索引Oracle索引
- 全域性分割槽索引和區域性分割槽索引索引
- Oracle索引分割槽Oracle索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- 分割槽表、分割槽索引和全域性索引部分總結索引
- 分割槽索引和全域性索引(轉載)索引
- 全面學習分割槽表及分割槽索引(17)--其它索引分割槽管理操作索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- MySQL 分割槽建索引MySql索引
- oracle分割槽索引(二)Oracle索引
- oracle分割槽索引(一)Oracle索引
- [轉]Oracle分割槽索引--本地索引和全域性索引比較Oracle索引
- Oracle分割槽索引--本地索引和全域性索引比較(轉)Oracle索引
- Oracle分割槽表及分割槽索引Oracle索引
- 全面學習分割槽表及分割槽索引(16)--增加和刪除索引分割槽索引
- 分割槽表全域性索引與本地索引的選擇索引
- 分割槽表本地索引與全域性索引的區別索引
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- 分割槽表及分割槽索引建立示例索引
- 分割槽索引的並行度索引並行
- Oracle的分割槽索引技術Oracle索引
- oracle 建立所有分割槽索引Oracle索引
- oracle 針對普通表的索引分割槽及10g新增hash 索引分割槽Oracle索引
- 1、如果在表test的列col上面建立索引,並且也是安裝A,B,C三種方法進行分割槽,那麼這個分割槽索引就是local partition index,因為這裡索引的分割槽方法和表的分割槽方法一模一樣。索引Index
- 分割槽表分割槽索引查詢效率探究索引
- SQL優化案例-分割槽索引之無字首索引(六)SQL優化索引
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- 分割槽表 全域性索引與本地索引失效測試索引
- 分割槽表並行建立索引並行索引
- 分割槽表索引實踐案例索引
- 分割槽索引學習筆記索引筆記
- 【原創】ORACLE 分割槽與索引Oracle索引