oracle使用索引與不使用索引的效能詳析
阿新 • • 發佈:2020-01-09
前言
Oracle儲存索引的資料結構是B*樹。點陣圖索引也是如此,僅僅只是是葉子節點不同B*數索引;
索引由根節點、分支節點和葉子節點組成。上級索引塊包括下級索引塊的索引資料,葉節點包括索引資料和確定行實際位置的rowid。
使用索引的目的:
- 加快查詢速度
- 降低I/O操作
- 消除磁碟排序
何時使用索引:
- 查詢返回的記錄數
- 排序表<40%
- 非排序表 <7%
- 表的碎片較多(頻繁新增、刪除)
索引的種類
- 非唯一索引(最經常使用)
- 唯一索引
- 點陣圖索引
- 區域性有字首分割槽索引
- 區域性無字首分割槽索引
- 全域性有字首分割槽索引
- 雜湊分割槽索引
- 基於函式的索引
oracle使用索引與不使用的效能
首先準備一張百萬條資料的表,這樣分析資料差距更形象!
下面用分頁表資料對錶進行分析,根據EMP_ID 欄位排序,使用索引和不使用索引效能差距!
sql查詢語法準備,具體業務根據具體表書寫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
如下:
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使用率很低,並且檢索是從索引開始而不是全文檢索
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。