首页 > 数据库 >SQL优化改写案例12(DM数据库SQL优化)

SQL优化改写案例12(DM数据库SQL优化)

时间:2023-04-21 22:24:24浏览次数:30  
标签:INFO 12 IND num 324467 SQL INNO 优化 96

 京华开发一哥们找我优化条SQL,反馈在DM数据库执行时间很慢需要 40s 才能出结果,安排。

原SQL:

SELECT A.IND_CODE,
       A.IND_NAME                                                                                AS "specialName",
       COUNT(C.ORDER_ID)                                                                         AS "orderCount",
       COUNT(CASE WHEN D.MEDIATE_RESULT IN ('达成调解协议', '双方自行和解') THEN C.ORDER_ID END) AS "successCount"
FROM XFWQ_SOURCE.INNO_DEPLOY_12315_INDUSTRY A
         LEFT JOIN XFWQ_SOURCE.INNO_COMPANY_INFO B
             ON A.IND_CODE = B.INDUSTRY_CD
         LEFT JOIN
     XFWQ_SOURCE.INNO_BUSI_INFO_SUBJECT C
         ON B.UNISCID = C.UNISCID
         LEFT JOIN XFWQ_SOURCE.INNO_BUSI_MEDIATE D
             ON C.ORDER_ID = D.ORDER_ID
WHERE A.IND_CODE = 'C'
GROUP BY A.IND_CODE,
         A.IND_NAME;

执行计划:

1   #NSET2: [491, 1, 96] 
2     #PRJT2: [491, 1, 96]; exp_num(4), is_atom(FALSE) 
3       #HAGR2: [491, 1, 96]; grp_num(2), sfun_num(2), distinct_flag[0,0]; slave_empty(0) keys(DMTEMPVIEW_889674440.TMPCOL0, DMTEMPVIEW_889674440.TMPCOL1) 
4         #PRJT2: [466, 324467, 96]; exp_num(4), is_atom(FALSE) 
5           #HASH RIGHT JOIN2: [466, 324467, 96]; key_num(1), ret_null(0), KEY(D.ORDER_ID=C.ORDER_ID)
6             #CSCN2: [1, 15287, 56]; INDEX33557062(INNO_BUSI_MEDIATE as D)
7             #HASH RIGHT JOIN2: [437, 324467, 96]; key_num(1), ret_null(0), KEY(C.UNISCID=B.UNISCID)
8               #CSCN2: [11, 97535, 56]; INDEX33557061(INNO_BUSI_INFO_SUBJECT as C)
9               #HASH LEFT JOIN2: [386, 324467, 96]; key_num(1), partition_keys_num(0), ret_null(0), mix(0) KEY(A.IND_CODE=B.INDUSTRY_CD)
10                #INDEX JOIN LEFT JOIN2: [386, 324467, 96]  ret_null(0)
11                  #ACTRL: [386, 324467, 96];
12                    #BLKUP2: [1, 1, 96]; INDEX33557119(A)
13                      #SSEK2: [1, 1, 96]; scan_type(ASC), INDEX33557119(INNO_DEPLOY_12315_INDUSTRY as A), scan_range['C','C']
14                  #BLKUP2: [351, 324467, 48]; IND_INDUSTRY_CD(B)
15                    #SSEK2: [351, 324467, 48]; scan_type(ASC), IND_INDUSTRY_CD(INNO_COMPANY_INFO as B), scan_range[A.IND_CODE,A.IND_CODE]
16                #CSCN2: [727, 5840415, 96]; INDEX33558123(INNO_COMPANY_INFO as B)

数据量如下:

select count(1) ,'A' from XFWQ_SOURCE.INNO_DEPLOY_12315_INDUSTRY
union all
select count(1) ,'B' from XFWQ_SOURCE.INNO_COMPANY_INFO
union all
select count(1) ,'C' from XFWQ_SOURCE.INNO_BUSI_INFO_SUBJECT
union all
select count(1) ,'D' from XFWQ_SOURCE.INNO_BUSI_MEDIATE;

 

 A、B、C、D 表 所有关联列都有索引,整体SQL返回一行数据,但是要 39s 左右,非常不合理。

 

 监控下缓慢的节点:

 

 发现慢的节点是 B 表产生BLKUP2,500多W行数据回表 ,IND_INDUSTRY_CD 索引无法找到所有数据。

B表创建联合索引:

create index idx_INNO_COMPANY_INFO_1_2 on XFWQ_SOURCE.INNO_COMPANY_INFO(INDUSTRY_CD,UNISCID);

 新的执行计划:

1   #NSET2: [158, 1, 96] 
2     #PRJT2: [158, 1, 96]; exp_num(4), is_atom(FALSE) 
3       #HAGR2: [158, 1, 96]; grp_num(2), sfun_num(2), distinct_flag[0,0]; slave_empty(0) keys(DMTEMPVIEW_889674491.TMPCOL0, DMTEMPVIEW_889674491.TMPCOL1) 
4         #PRJT2: [133, 324467, 96]; exp_num(4), is_atom(FALSE) 
5           #HASH RIGHT JOIN2: [133, 324467, 96]; key_num(1), ret_null(0), KEY(D.ORDER_ID=C.ORDER_ID)
6             #CSCN2: [1, 15287, 56]; INDEX33557062(INNO_BUSI_MEDIATE as D)
7             #HASH RIGHT JOIN2: [104, 324467, 96]; key_num(1), ret_null(0), KEY(C.UNISCID=B.UNISCID)
8               #CSCN2: [11, 97535, 56]; INDEX33557061(INNO_BUSI_INFO_SUBJECT as C)
9               #HASH LEFT JOIN2: [54, 324467, 96]; key_num(1), partition_keys_num(0), ret_null(0), mix(0) KEY(A.IND_CODE=B.INDUSTRY_CD)
10                #INDEX JOIN LEFT JOIN2: [54, 324467, 96]  ret_null(0)
11                  #ACTRL: [54, 324467, 96];
12                    #BLKUP2: [1, 1, 96]; INDEX33557119(A)
13                      #SSEK2: [1, 1, 96]; scan_type(ASC), INDEX33557119(INNO_DEPLOY_12315_INDUSTRY as A), scan_range['C','C']
14                  #SSEK2: [49, 324467, 96]; scan_type(ASC), IDX_INNO_COMPANY_INFO_1_2(INNO_COMPANY_INFO as B), scan_range[(A.IND_CODE,min),(A.IND_CODE,max))
15                #SSCN: [727, 5840415, 96]; IDX_INNO_COMPANY_INFO_1_2(INNO_COMPANY_INFO as B)

可以看到在创建完联合索引后,#BLKUP2: [351, 324467, 48]; 回表计划消失了,SQL也能0.3S跑出结果。

B表UNISCID字段本身就是主键,而INDUSTRY_CD字段本身有索引,开发老哥以为走了两个字段都走主键索引不会有什么问题,而忽略了回表计划,在大表产生回表计划是非常恐怖的事情!!!

 

总结:近两年感觉国产数据库市场份额越来越高了,笔者SQL优化的案例更多得也是从ORACLE、MySQL变成了DM、金仓数据库,

         建议大家还是要好好深入学习下国产数据库,免得35岁被优化了找不到工作 。   

 

标签:INFO,12,IND,num,324467,SQL,INNO,优化,96
From: https://www.cnblogs.com/yuzhijian/p/17342026.html

相关文章

  • docker mysql 错误跟innodb有关
     错误截图 dockerps-a查看所有容器  容器开启失败,进入也失败 原因两个数据的文件冲突了,将你需要启动的那个数据库里面的这个干掉(即删除这两个文件)解决方式:备份(或者移除)两个文件ib_logfile0ib_logfile1 查找文件所在目录find/-nameib_logfile0......
  • 程序员面试金典---12
    递归乘法直接上代码:/***@param{number}A*@param{number}B*@return{number}*/varmultiply=function(A,B){if(A===0||B===0)return0arr=[0]for(leti=1;i<=B;i++){arr[i]=arr[i-1]+A}returnarr[B......
  • mysql练习题1
    2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;SELECTC.student_id,C.SHENGWU,D.WULIFROM(SELECTA.student_id,A.numberASSHENGWUFROMsockeALEFTJOINcorseBONA.corse_id=B.cidWHEREB.cname='生物')ASCLEFTJOIN(SELECTsocke.stud......
  • PHP7革新与性能优化
    有幸参与2015年的PHP技术峰会(PHPCON),听了鸟哥(惠新宸)的关于PHP7的新特性和性能优化的分享,一切都令人感到激动。鸟哥是国内最权威的PHP专家,他的分享有很多非常有价值的东西,我通过整理分享的PPT和收集相关资料,整理为这篇解读性质的技术文章,希望能给做PHP开发的同学一些帮助。 PHP已......
  • 多态性12
    #include<iostream>usingnamespacestd;classPoint{ public: Point(){ x=0; y=0; } Point(floatx1,floaty1){ x=x1; y=y1; } friendPointoperator+(constPoint&p1,constPoint&p2); Point&operator=(constPoint&pd); friend......
  • The 1st Universal Cup. Stage 12: Ōokayama
    G容斥完之后发现要求一个m次多项式的n次方,并且得到\(n\timesm\)项。原本很sb地直接套了个多项式LnExp上去(即使知道大概率过不了),然后狂TLE。。。其实但凡从常数的角度分析,Exp的常数有14倍,已经比\(log(m)\)大了,所以不如写快速幂,然后写着就会发现卷积的长度总和其实是\((n\times......
  • springboot定时同步数据,从sqlserver到mysql
    https://www.cnblogs.com/SjhCode/p/sqlserverToMysql.html定时同步数据,从sqlserver到mysql 注意事项:一.primary:master #设置默认的数据源或者数据源组,默认值即为master二.@Scheduled()和 @DS("slave_1")注解 步骤:1.在原先运行的程序外,新建多加一个springboot程序......
  • SqlSessionFactory
    SqlSessionFactory是创建SqlSession的工厂.每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为核心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先配置的Configuration实例......
  • 多态性12
    #include<iostream>#definePI3.14usingnamespacestd;classShape{public:    Shape(){cout<<"shape构造"<<endl;}    virtualdoublegetArea()=0;    virtualdoublegetPerim()=0;    ~Shape(){cout<<"shape析构"<......
  • mysql-json类型字段多值并查
    mysql8.0.17版本支持json索引.官方文档:https://dev.mysql.com/doc/refman/8.0/en/json.html规则版本是否支持5.7.8版本:支持json类型字段8.0.17版本:支持json类型字段多列索引环境是否支持当前环境中使用的是gorm负责mysql的交互。支持原生sql操作,所以go......