cvqudisk oracle,oracle select count一次优化经历

优化场景:以下语句执行用时84s,

select count(*)

from t_zz_support_object t1, T_DC_CI_RS_TOP t3

where t1.status = 1

and t1.ci_rs_id = t3.ci_rs_id

and t1.org_id in   (

select org_id from t_dc_org_entity_info start with org_id = 3213 connect by prior org_id = parent_org_id

)

0818b9ca8b590ca3270a3433284dd417.png

优化过程:

@Tony(943004851)  10:40:13

你看看执行计划 返回的基数  是不是和查询的一致

启用10053  事件  跟踪一下

index full scan  和扫描全表几乎差不多

为什么select count(1) from  84秒    select *   from 0.015 秒

Tony(943004851)  10:56:40

第一个查询完  要进行一次count操作  这是几乎块操作  要所有的块都查询完  在进行count

第二个是非块操作  即行读取  一行一行的读取

分析@awrpt

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png  前两个语句共用了72.27%的逻辑读,KEY_T_DC_CIRS逻辑读 54%,

1万以上的逻辑读和执行计划里的cost=0显然不符,执行计划说KEY_T_DC_CIRS的全扫描cost为0,和你说的表的数据量很大不符。就是统计信息的问题,你的表数据最近发生大变动了,变动后没有刷新统计信息

手动刷新统计信息语句速度上去了:

begin

dbms_stats.gather_table_stats(ownname => 'zhsq', tabname => 'T_DC_CI_RS_TOP',

estimate_percent => 0.5, method_opt => 'for all columns size skewonly',cascade => TRUE);

end;

执行后的语句执行计划:

0818b9ca8b590ca3270a3433284dd417.png

怎么看 执行计划是否接近完美   Tony(943004851)  12:30:05 最直观的方法就是 看你执行计划返回的行数或者cardinality(基数)  和你数据表或其他对象 是否一致 还要分析 表、索引和相关列的统计信息  是以统筹的概念和信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值