1. 程式人生 > 資料庫 >oracle使用索引與不使用索引的效能詳析

oracle使用索引與不使用索引的效能詳析

前言

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

可以分析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使用率很低,並且檢索是從索引開始而不是全文檢索

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。