索引@oracle索引技術

lff1530983327發表於2015-02-05

索引

索引:其中記錄的書rowid以及可以標示堆組織表的一行,聚簇表例外

獨特值

覆蓋索引

B樹索引:索引組織表 organization index

         唯一索引:unique index

         反向鍵索引:reverse

         鍵壓縮索引:compress 2

         降序索引:

------------------------------------------------------索引健壓縮是指從串聯(多列)索引取出冗餘

select * from user_objects where  object_type='INDEX';

create table t as select * from all_objects where rownum<=50000;

create index t_idx on t(owner,object_type,object_name);

select * from big_table;

ANALYZE INDEX t_idx VALIDATE STRUCTURE;

create table idx_stats as select 'noncompressed' what,  a.* from index_stats a;

select * from idx_stats;

drop index t_idx;

create index t_idx on t(owner,object_type,object_name) compress &1;----使用3個壓縮列來建立這個索引

create index t_idx on t(owner,object_type,object_name) compress &1;----使用2個壓縮列來建立這個索引

create index t_idx on t(owner,object_type,object_name) compress &1;----使用1個壓縮列來建立這個索引

analyze index t_idx validate structure;

insert into idx_stats select 'compress &1',a.* from index_stats a; 

select  what,height,lf_blks 葉子節點塊,br_blks ,btree_space 可以得出索引大小,opt_cmpr_count 可用的最佳壓縮數,opt_cmpr_pctsave 節省空間 from idx_stats 

----------------------------------------------------------------反向健索引是指主要用於緩解忙索引右側的緩衝區

select 90101 ,dump(90101,16from dual;

begin dbms_stats.gather_index_stats(user,'T',method_opt => 'for all indexed column');end;

 select * from user_objects where object_type='TABLE';

 

點陣圖索引:相對較低的差異值 bitmap(資料倉儲環境中用的較多)

點陣圖連線索引:表的外來鍵列和另一個表的主鍵列連線時適用

主鍵約束:在主鍵列值上自動建立索引

唯一鍵約束:

1 只讀索引塊

2 讀索引與資料塊

3 只讀資料塊

dbms_space.create_index_cost 估算索引大小

dbms_metadata.get_ddl 獲取後設資料

alter index unusable/invisible

alter index rebuild

drop  index

 不可見 需要維護用來避免鎖定問題或強制執行約束

 不可用 最佳化器不用 維護不用

 外來鍵索引:主要是為了減少鎖定問題

 

 當select子句中的列都具有索引時 這種索引稱為覆蓋索引 只需讀取索引塊主鍵列

 

 index range scan

 index fast full scan ---count()很適用

  db block gets+consistent gets=總的記憶體讀

 buffer is pinned count 第二次讀取的塊數是收集在緩衝區被釘住記數統計資訊裡面而不被收集進入統計資訊中。

 

 dbms_rowid.rowid_relative_fno(rowid)---rowid轉換

 

 外聯 約束宣告與列定義之間 用逗號 好處是可以為主鍵指定多列

 constraint cust_pk primary key(cust_id);

 

 獨立索引刪除與禁用 主鍵約束 先建unique index之後 add constraint primary key 

 listagg 

organization index:  儲存在b樹索引結構中 在此結構中沒有為每行儲存物理rowid

star_transformation 星型轉換

IOT(堆組織表索引組織表:按主鍵的順序儲存的,所以必須有主鍵

----分割槽索引

索引的前導部分:在列清單中首先指定索引中的一個或多個列

on table mytable(a,b,c)

前導部分為:a b abc b c bc不是

前導部分只有少量的不同值而非前導部分有很多不同值,這個時候會選擇索引跳躍掃描(邏輯子索引)

複合索引:確保where 子句中使用的鍵組成複合索引的前導部分

global 可以在分割槽表或則非分割槽表中使用

local 只可以在分割槽表的基礎上建立

表的分割槽在前導列:字首索引

全域性分割槽索引:必須有一個maxvalue 必須是字首分割槽索引

alter table employees_12 split partition manager_max at(1000into (partition manager_max,partition manager_1000);

alter table t truncate  截斷分割槽--全域性unusable 本地的usable

alter table t move      移動分割槽--全域性和本地都是unusable,但是本地只是在這個分割槽內unusable

截斷分割槽清除表分割槽內的所有資料

本地分割槽索引:不影響底層的索引分割槽

非分割槽索引/全域性index :全部變成unusable

新增虛擬分割槽實現分割槽拆分 :虛擬一個高階值 然後在高階值後面新增一個maxvalue 刪除某個分割槽對本地索引分割槽沒有任何影響 usable

alter table t merge partition p1995 ,pmax into partition pmax update indexs;--更新之後的status會依然是usable

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

相關文章