当前位置: 首页 > news >正文

网站切片 做程序数据分析师报名入口

网站切片 做程序,数据分析师报名入口,品牌服务推广,三门网站建设前两天在项目应用系统放提出一个需要优化的SQL,希望我们能协助进行优化.需优化的sql脚本如下(相关表名已经过处理): select distinct t.id as nId, t.task_id, t.org_id, t.org_name, t.task_date, tb.gather_time,CASEWHEN tb.batch_node 0 THEN 1 ELSE 0END AS taskState,t…

        前两天在项目应用系统放提出一个需要优化的SQL,希望我们能协助进行优化.需优化的sql脚本如下(相关表名已经过处理):

select distinct t.id as nId, t.task_id, t.org_id, t.org_name, t.task_date, tb.gather_time,CASEWHEN tb.batch_node = 0 THEN 1 ELSE 0END AS taskState,tb.failure_reason as executeDetail, t.biz_date as buzDate, t.is_consistency_check, case when cboi.org_no is not null then '1' end as corpBrOrgInfoUploaded,case when cggci.org_no is not null then '1' end as corpGovGuarCoprInfoUploaded,case when cscgi.org_no is not null then '1' end as corpSupyChinGuarInfoUploaded,case when cfpi.org_no is not null then '1' end as corpFiscPoliInfoUploadedfrom T1 tJOIN (SELECT A.* FROM (SELECT * , ROW_NUMBER () OVER ( PARTITION BY task_id ORDER BY batch_seq_id DESC ) AS rn FROM T2) A WHERE A.rn = 1) tb ON t.task_id = tb.task_id        left join "T3" cboi on cboi.task_id = tb.task_idand cboi.batch_seq_id = tb.batch_seq_idleft join "T4" cggci on cggci.task_id = tb.task_idand cggci.batch_seq_id = tb.batch_seq_idleft join "T5" cscgi on cscgi.task_id = tb.task_idand cscgi.batch_seq_id = tb.batch_seq_idleft join "T6" cfpi on cfpi.task_id = tb.task_idand cfpi.batch_seq_id = tb.batch_seq_id    and t.task_frequency = '3'           ORDER BY t.task_date desc limit 10;

          单独拎出来跑下执行计划:

        通过执行计划很容易看出来是Hash Left Join完成到Sort开始耗时过长,计划中其他节点用时都没问题.

        附言:窗口函数对于数据量的预估干扰,窗口函数无法保证准确的预估,包括ORACLE也是.

        根据上图执行计划中Sort Method:external merge Disk:53208KB,会话级修改work_mem参数保证Sort Method:quicksort后,执行时间并没有明显的改善.又尝试会话级禁用nestloopjoin改用hashjoin也没得到很好的效果.那就只能从耗时大的节点(Sort)入手处理了.

        去掉distinct,将查询出来的数据通过create table as的方式导入到临时表t_temp1中,在查看select distinct * from t_temp1的执行计划,如下图所示:

        HsahAggregate节点与之前的Sort节点相比,时间缩短了很多.下面尝试把order by提到外层,修改后的sql如下:

select * from
(
select distinct t.id as nId, t.task_id, t.org_id, t.org_name, t.task_date, tb.gather_time,CASEWHEN tb.batch_node = 0 THEN 1 ELSE 0END AS taskState,tb.failure_reason as executeDetail, t.biz_date as buzDate, t.is_consistency_check, case when cboi.org_no is not null then '1' end as corpBrOrgInfoUploaded,case when cggci.org_no is not null then '1' end as corpGovGuarCoprInfoUploaded,case when cscgi.org_no is not null then '1' end as corpSupyChinGuarInfoUploaded,case when cfpi.org_no is not null then '1' end as corpFiscPoliInfoUploadedfrom T1 tJOIN (SELECT A.* FROM (SELECT * , ROW_NUMBER () OVER ( PARTITION BY task_id ORDER BY batch_seq_id DESC ) AS rn FROM T2) A WHERE A.rn = 1) tb ON t.task_id = tb.task_id        left join "T3" cboi on cboi.task_id = tb.task_idand cboi.batch_seq_id = tb.batch_seq_idleft join "T4" cggci on cggci.task_id = tb.task_idand cggci.batch_seq_id = tb.batch_seq_idleft join "T5" cscgi on cscgi.task_id = tb.task_idand cscgi.batch_seq_id = tb.batch_seq_idleft join "T6" cfpi on cfpi.task_id = tb.task_idand cfpi.batch_seq_id = tb.batch_seq_id    and t.task_frequency = '3'           ) ORDER BY t.task_date desc limit 10;

        查看执行计划,distinct去重操作还是走了Sort(理论上distinct也可以走HsahAggregate),而不是HsahAggregate.在select distinct中间手动添加/* + hashagg */hint后,再执行看看执行计划:

        手动添加hint后还是不能走HsahAggregate.保留hint,将order by去掉再执行看看执行计划:

        一如既往,还是不走HsahAggregate.

        .换个思路,尝试替换distinct为group by,看看能不能走HsahAggregate.修改后的sql如下:

select /* + hashagg */t.id as nId, t.task_id, t.org_id, t.org_name, t.task_date, tb.gather_time,CASEWHEN tb.batch_node = 0 THEN 1 ELSE 0END AS taskState,tb.failure_reason as executeDetail, t.biz_date as buzDate, t.is_consistency_check, case when cboi.org_no is not null then '1' end as corpBrOrgInfoUploaded,case when cggci.org_no is not null then '1' end as corpGovGuarCoprInfoUploaded,case when cscgi.org_no is not null then '1' end as corpSupyChinGuarInfoUploaded,case when cfpi.org_no is not null then '1' end as corpFiscPoliInfoUploadedfrom T1 tJOIN (SELECT A.* FROM (SELECT * , ROW_NUMBER () OVER ( PARTITION BY task_id ORDER BY batch_seq_id DESC ) AS rn FROM T2) A WHERE A.rn = 1) tb ON t.task_id = tb.task_id        left join "T3" cboi on cboi.task_id = tb.task_idand cboi.batch_seq_id = tb.batch_seq_idleft join "T4" cggci on cggci.task_id = tb.task_idand cggci.batch_seq_id = tb.batch_seq_idleft join "T5" cscgi on cscgi.task_id = tb.task_idand cscgi.batch_seq_id = tb.batch_seq_idleft join "T6" cfpi on cfpi.task_id = tb.task_idand cfpi.batch_seq_id = tb.batch_seq_id    and t.task_frequency = '3'GROUP BY t.id , t.task_id, t.org_id, t.org_name, t.task_date, tb.gather_time,CASEWHEN tb.batch_node = 0 THEN 1 ELSE 0END ,tb.failure_reason , t.biz_date as buzDate, t.is_consistency_check, case when cboi.org_no is not null then '1' end ,case when cggci.org_no is not null then '1' end ,case when cscgi.org_no is not null then '1' end ,case when cfpi.org_no is not null then '1' end      ORDER BY t.task_date desc limit 10;

        查看修改后的执行计划:

        从Sort改走了HsahAggregate,效率提升很多.

        上述排查过程并不是本人独自完成,优化方法是请教的专门做优化的同事,后期自己总结归纳出来的优化思路.

        总结:通过执行计划找到具体执行慢的部分,去做针对性优化.

http://www.dtcms.com/a/513405.html

相关文章:

  • 宿迁市网站建设口腔医院网站开发
  • Redis 特性/应用场景/通用命令
  • 学生个人网站建设模板网站为什么做站外推广
  • 零基础学网站建设 知乎长治长治那有做网站的
  • RPC服务
  • 北京外贸网站设计备案邯郸网页
  • 素马网站制作开发腾讯朋友圈广告怎么投放
  • 网站开发包括哪些网站推广怎么做
  • SwiftUI自定义一个水平渐变进度条
  • 电力电子技术 第四章——半导体功率器件
  • 网站运营专员具体每天怎么做wordpress音乐加载慢
  • 网站建设中图片是什么意思推特是谁的公司
  • 免费做手机网站有哪些wordpress注册邮箱收不到
  • 搜狗网站排名软件国内图片下载网站
  • wordpress 百度平台网站优化排名
  • 22.unordered_map和unordered_set的封装
  • 网站框架图片二维码生成器网页版
  • 做3d效果的网站wordpress中文问答模块
  • 杭州网站推广优化哪里好wordpress编辑文章更新失败
  • 工信部网站 地址呼伦贝尔网站建设维护
  • 帝国网站数据库配置文件网站建设程序员
  • 找别人做淘客网站他能改pid吗全网营销策划公司
  • 温州建设小学瓯江校区网站wordpress 订阅推送
  • 全屏网站帮助2021十条重大新闻
  • 自动识别手机和电脑版本网站阿里网站建设视频教程
  • 银行网站建设中优化大师下载电脑版
  • 网站建设的通知网站维护分工关键词爱站网关键词挖掘工具
  • 盘锦市住房和城乡建设厅网站济南的企业网站建设
  • Aspose.Total for .NET Crack
  • 企业建设银行网站登录不了网络推广方案有哪些