小白開始學習索引之路
大表,返回的行數<5%
經常使用where子句查詢的列
離散度高的列
更新鍵值代價低
邏輯and,or 效率高
檢視索引在建在那錶那列:
唯一索引:唯一索引指鍵值不重複。
create unique index empno_idx on emp(empno) ;
drop index empno_idx;
一般索引:鍵值可以重複
create index empno_idex on emp(empno)
組合索引:繫結兩個或更多列的索引。
create index empno_idex on emp(empno,depno)
反向索引:為了避免平衡樹索引熱塊,比如emp表中員工號都是以7 開頭,這樣你建索引就會把很多資料分配到乙個索引塊裡,使用反向索引可以報資料庫分布均勻。例如表裡有 7788,7889,7666如果建一般索引這三條資料就會分配到乙個索引塊,如果建反向索引,8877,9887,6667這三個就會分配到三個索引塊裡。
create index mgr_idx on emp1(mgr) reverse;
函式索引:如果查詢是必須用這個函式,可以這麼建索引
create index fun_idx on emp1(lower(ename));
select * from empl where lower(ename)=『scott』;
壓縮索引
create index comp_idx on emp(sal) compress;
公升序降序索引
create index deptno_job_idx on emp(deptno desc,job asc);
由於對基礎表做dml操作,導致索引表塊的自動更改操作,尤其是delete操作,會引起index表的index_entries的邏輯刪除,注意只有當乙個索引塊中的全部index_entry都被刪除,才會把這個索引塊刪除,索引對基礎表的delete,insert,操作做會產生索引碎片問題。例如乙個index_entry對應行被刪除啦,但是還有其他的index_entry,這樣會導致這個索引塊不被刪除。這樣就會產生索引碎片。
在oracle文件裡並沒有清晰的給出索引碎片的量化標準,oracle官方建議通過seqment advisor(段顧問)解決表和索引的碎片問題,如果你想自行解決,可以通過檢視index_stats檢視,當以下三種情況之一發生時,說明積累的碎片應該整理(僅供參考)啦。
1.height>=4 這個是索引的高度
2.pct_used<50%
3.del_lf_rows/lf_rows>0.2
場景模擬:
對該錶進行刪除操作:
delete from t where rownum<800000
重新分析重新執行
analyze index ind_1 validate structure;
select name,height,pct_used,del_lf_rows/lf_rows from index_stats
結果
10g及其以後可以通過以下語句
alter index ind_l rebulid [online] [tablespace name]
alter
index ind_1 rebuild online;
analyze
index ind_1 validate structure;
select name,height,pct_used,del_lf_rows/lf_rows from index_stats
Oracle index 索引提示解析
使用 hints 時,在某些情況下,為了確保讓優化器產生最優的執行計畫,我們可能指定全套的 hints oracle 索引提示,oracle index 提示,oracle index tips oracle index 優化,oracle index 提示。指示優化器的方法與目標的 hints a...
Oracle Index 索引無效原因
最近遇到乙個sql語句的效能問題,修改功能之前的執行時間平均為0.3s,可是新增新功能後,時間達到了4 5s。雖然幾張表的資料量都比較大 都在百萬級以上 但是也都有正確建立索引,不知道到底慢在了 下面展開調查。經過幾次排除,把問題範圍縮小在索引上,首先在確定索引本身沒有問題的前提下,考慮索引有沒有被...
oracle index的5種使用模式
索引的使用對資料庫的效能有巨大的影響。共有五類不同的使用模式。1。index unique scan 效率最高,主鍵或唯一索引 2。index full scan 有順序的輸出,不能並行讀索引 3。index fast full scan 讀的最塊,可以並行訪問索引,但輸出不按順序 4。index ...