发布源码

oracle使用索引与不使用索引的性能详析

  • 时间:2020-11-09 13:06:27
  • oracle
  • 浏览量:0
  • 发布会员:Lpyexplore
  • 前言

    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使用率很低,并且检索是从索引开始而不是全文检索

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习网上卖,如果有疑问大家可以留言交流,谢谢大家对乐购源码的支持。

    提示:喜欢这个作品给它点个红心和关注吧
    Lpyexplore

    Lpyexplore