前言
Oracle存儲索引的數(shù)據(jù)結(jié)構(gòu)是B*樹。位圖索引也是如此,僅僅只是是葉子節(jié)點不同B*數(shù)索引;
索引由根節(jié)點、分支節(jié)點和葉子節(jié)點組成。上級索引塊包括下級索引塊的索引數(shù)據(jù),葉節(jié)點包括索引數(shù)據(jù)和確定行實際位置的rowid。
使用索引的目的:
何時使用索引:
- 查詢返回的記錄數(shù)
- 排序表40%
- 非排序表 7%
- 表的碎片較多(頻繁添加、刪除)
索引的種類
- 非唯一索引(最經(jīng)常使用)
- 唯一索引
- 位圖索引
- 局部有前綴分區(qū)索引
- 局部無前綴分區(qū)索引
- 全局有前綴分區(qū)索引
- 散列分區(qū)索引
- 基于函數(shù)的索引
oracle使用索引與不使用的性能
首先準(zhǔn)備一張百萬條數(shù)據(jù)的表,這樣分析數(shù)據(jù)差距更形象!
下面用分頁表數(shù)據(jù)對表進行分析,根據(jù)EMP_ID 字段排序,使用索引和不使用索引性能差距!
sql查詢語法準(zhǔn)備,具體業(yè)務(wù)根據(jù)具體表書寫sql語法:
SELECT *
FROM (SELECT ROW_.*, ROWNUM ROWNUM_
FROM (SELECT *
FROM KQS_SQ_INFO i
ORDER BY i.EMP_ID desc ) ROW_
WHERE ROWNUM = 20)
WHERE ROWNUM_ >= 10;
使用 explain plan for
可以分析sql
如下:
explain plan for SELECT *
FROM (SELECT ROW_.*, ROWNUM ROWNUM_
FROM (SELECT *
FROM KQS_SQ_INFO i
ORDER BY i.EMP_ID desc ) ROW_
WHERE ROWNUM = 20)
WHERE ROWNUM_ >= 10;
計算出SQL性能,使用
select * from TABLE(dbms_xplan.display);打印出性能分析表
如下圖:
使用索引前:
使用索引后
可以清晰看到使用后cpu使用率很低,并且檢索是從索引開始而不是全文檢索
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- oracle索引的測試實例代碼
- oracle數(shù)據(jù)庫關(guān)于索引建立及使用的詳細介紹
- Oracle Index索引無效的原因與解決方法
- ORACLE檢查找出損壞索引(Corrupt Indexes)的方法詳解
- Oracle復(fù)合索引與空值的索引使用問題小結(jié)
- oracle分區(qū)索引的失效和重建代碼示例
- Oracle關(guān)于重建索引爭論的總結(jié)
- Oracle 分區(qū)索引介紹和實例演示
- Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析
- oracle索引總結(jié)