问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何获得SQL的执行计划

发布网友 发布时间:2022-04-08 02:48

我来回答

2个回答

懂视网 时间:2022-04-08 07:09

今天在生产库里抓到一条跑得慢的SQL,语句不是很复杂,返回的数据才有800多行,

却执行了34分钟,甚至更久。

先看一下执行结果

技术分享

我贴一下SQL。

SELECT a.dec_yt1 ,
 b.dec_yt1 ,
 a.dec_yt2 ,
 b.dec_yt2 ,
 a.dec_yt3 ,
 b.dec_yt3
FROM ctlm8288 a ,
 ( SELECT t.corr_id ,
   t.clerk_id ,
   ROUND(SUM(ISNULL(t.dec_yt1, 0)), 2) AS dec_yt1 ,
   ROUND(SUM(ISNULL(t.dec_yt2, 0)), 2) AS dec_yt2 ,
   ROUND(SUM(ISNULL(t.dec_yt3, 0)), 2) AS dec_yt3
  FROM ( SELECT b.corr_id ,
    b.clerk_id ,
    CASE WHEN d.feetype_flag = ‘1‘
     THEN ROUND(SUM(a.dec_sqty * c.fee_price),
      2)
    END AS dec_yt1 ,
    CASE WHEN d.feetype_flag = ‘2‘
     THEN ROUND(SUM(a.dec_sqty * c.fee_price),
      2)
    END AS dec_yt2 ,
    CASE WHEN d.feetype_flag = ‘3‘
     THEN ROUND(SUM(a.dec_sqty * c.fee_price),
      2)
    END AS dec_yt3
   FROM ctlm8666 a ,
    ctlm8001 b ,
    v_saft04 c ,
    ctlm8206 d
   WHERE a.terminal_id = b.terminal_id
    AND b.dept_id = c.dept_id
    AND a.item_id = c.vitem_id
    AND c.fee_id = d.fee_id
    AND d.flag_t = ‘Y‘
    AND a.fiscal_year = 2015
    AND a.fiscal_period <= 6
    AND c.cur_year = 2015
    AND b.tertype_id LIKE ‘0102%‘
   GROUP BY b.corr_id ,
    b.clerk_id ,
    c.fee_id ,
    d.feetype_flag
   ) t
  GROUP BY t.corr_id ,
   t.clerk_id
 ) b
WHERE a.corr_id = b.corr_id
 AND a.clerk_id = b.clerk_id
 AND a.fiscal_year = 2015
 AND a.fiscal_period = 6

SQL的写法没太大问题,我试着执行下,然后就是漫长的等待过程...

30分过去了,还没出结果,我看了执行计划,就知道问题出在哪了。

技术分享

看了执行计划圈红的地方,优化器对ctlm8666和ctlm8001表预估只有一行,然后对这2张表做下统计,看是否真的只有1行。

SELECT COUNT(*)
FROM ctlm8666 a
WHERE a.fiscal_year = 2015
 AND a.fiscal_period <= 6--1650439
SELECT COUNT(*)
FROM ctlm8001 b
WHERE b.tertype_id LIKE ‘0102%‘--229823

预估数据和实际数据差别很大,出现这种情况,很可能的原因就是统计信息出问题了。

对ctlm8666表收集统计信息,在跑的SQL很快就有结果了。

我重新执行了下,看收集统计信息后,SQL执行要多久,下图是结果。

技术分享

(本文完)

收集统计信息让SQL走正确的执行计划

标签:

热心网友 时间:2022-04-08 04:17

如何获取某个sql语句的执行计划
oracle 10g的DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,
显示真实的执行计划有助于更好的分析SQL语句的全过程,尤其是运行此SQL语句实时的I/O开销。通过对比预估的I/O与真实的I/O开销来判断
SQL语句所存在问题,如缺少统计信息,SQL语句执行的次数,根据实际中间结果集的大小来选择合适的连接方式等。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 地球有哪些历史? 地球从古至今经历了多少个纪元? 地球历史 王利发 唐铁嘴 松二爷 常四爷 二德子 马武业 性格特征 为何说宋明时期的文人最具风雅感? 地球的发展历史 茶馆第一幕的人物,并分为两类 做PPT,怎么做才能与众不同? 下一部迪士尼公主电影是什么? 索尼的Wl-1000x耳机怎么样,体验如何,值不值得上手 为什么很多国外影视作品的中文片名跟原名含义完全不一致,甚至很粗暴随 ... 二德子的介绍 索尼sth32耳机怎么样 求图片上圈出来的字体!! 求老舍《茶馆》人物介绍 请问图片中的字体是什么? 《茶馆》里的人物性格特点 美国真是万恶之源吗? SONY的耳机低音怎么样? moana pozzi怎么死的 地球的历史上可能发生过哪些我们不知道的重大事件? 地球历史的地球起源 地球历史的介绍 鱼子酱黄金修复护眼霜和鱼子酱冷冻护眼霜有什么不同? 地球的各个历史阶段是怎样划分的 地球有多少历史? 地球历史有多少年,人类历史有多少年 la prairie鱼子酱眼霜多少钱 H2SO4贵吗? 鱼子酱眼霜干了如何恢复 一般来说。硫酸、硝酸、盐酸那个贵 金子和硫酸哪个更贵? 硫酸和盐酸谁贵 98%的硫酸和92%的硫酸哪个贵 为什么50%的硫酸比98%的硫酸贵 生产一吨盐酸,硫酸,硝酸的成本谁高?为什么? 硫酸亚铁 很贵吗? 硫酸镁与别的化学品比起来算不算贵? 硫酸钾和氯化钾哪个贵 116网站是真的嘛?