暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle查看索引执行情况

yuerer 2024-03-30
463

其中表cs_prem_info的索引列为

---agentno 单列索引

---busi_src_type, j_date 组合索引

---polno

先用执行计划语句查看sql的执行情况

步骤1:explain plan for + 跟上你要执行的SQL;

步骤2:select * from table(dbms_xplan.display());


优点:无须真正执行,快捷方便


缺点:
a.没有输出运行时的相关统计信息(产生多少逻辑读;多少次递归调用;多少次物理读情况);
b.无法判断处理了多少行;
c.无法判断表被访问了多少次;


3.分析

EXPLAIN PLAN FOR 
select c.agentno, to_char(trunc(c.j_date, 'dd'), 'yyyymmdd') j_date, c.channel_code,
       c.busi_src busi_src_type,
       c.plan_code,
       c.client_name,
       c.polno,
       c.tot_prem,
       c.comm_rate,
       c.comm,
       c.is_app,
       c.is_mit
  from lifedata.cs_prem_info c
where c.AGENTNO = '1020399034';select * from table(dbms_xplan.display());
复制

    单列索引,必走索引

    步骤二用SELECT * FROM PLAN_TABLE;分析时

    ---operation列为index, object_type为index

    ---还有一条记录operation列为table access, object_type为table,这个是因为要查询的字段不在索引中,不能用到覆盖索引,只能回表:通过普通索引获取主键id, 再通过id在聚簇索引上拿到所有列的字段值


EXPLAIN PLAN FOR 
select c.agentno, to_char(trunc(c.j_date, 'dd'), 'yyyymmdd') j_date, c.channel_code,
       c.busi_src busi_src_type,
       c.plan_code,
       c.client_name,
       c.polno,
       c.tot_prem,
       c.comm_rate,
       c.comm,
       c.is_app,
       c.is_mit
  from lifedata.cs_prem_info c
where c.j_date >= to_date('20190212', 'yyyymmdd')
   and c.j_date < to_date('20190312', 'yyyymmdd')
and c.busi_src = 'P';select * from table(dbms_xplan.display());
复制

     组合索引,范围查询,仍走索引;索引顺序调整不会使索引失效。但是组合索引第一个条件不能缺少;并且如果要使用后面的索引条件,必须先保证用到前一个索引条件,所谓"带头大哥不能死,中间兄弟不能断", 貌似是mysql的规则,oracle没有这样的规则,oracle仍能用索引

最后修改时间:2024-03-30 12:26:46
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论