,,sql优化实战 把full join改为left join +union all(从5分钟降为10秒)

,,sql优化实战 把full join改为left join +union all(从5分钟降为10秒)

因为特殊原因,无法访问客户的服务器,没办法查看结构化查询语言的执行计划、没办法知道表中的索引情况,所以,尝试从语句的改写上来优化

今天收到一个需求,要改写一个报表的逻辑,当改完之后,再次运行,发现运行超时。

因为特殊原因,无法访问客户的服务器,没办法查看结构化查询语言的执行计划、没办法知道表中的索引情况,所以,尝试从语句的改写上来优化。

一、原始语句如下:

选择isnull(虚拟客户标识,虚拟客户标识)作为客户标识,

isnull(vv.business_date,replace(v.business_date,'-',''))作为业务日期,

五。产品标识,

五、销售

vv.visit_count,

五。所有_销售

选择一个客户id,

最大(月)'-01 '作为业务日期,

a.产品标识,

SUM(CAST(数值为数字(38,3)))销售额,

sum(SUM(CAST(VALUE AS NUMERIC(38,3)))over(partition by a . customer _ id)AS all _ sales

从TB _进口_销售a

其中,客户标识不为空

并且。产品标识不为空

而a.month='2016-11 '

按客户标识分组,

a.产品标识

)v

完全连接

选择客户标识,

max(a.business_date)作为业务日期,

计数(*)作为访问计数

从TB_CALL_STORE a WITH(NOLOCK)

内部联接TB _时间d

商务日期=商务日期

其中d.section='2016-11 '

按客户标识分组

)vv

on v.customer_id=vv.customer_id

原来是左连接,虽然查询比较慢,但是2分钟能查出来,现在按照业务要求,需要看到所有数据,所以改成了完全加入,改了之后5分钟都查不出结果。

二、改写后的代码

选择五.客户id,

替换(max(v.business_date),'-','')为业务日期,

五。产品标识,

最大(销售数量)销售数量,

最大访问次数

最大值(所有销售额)

选择一个客户id,

max(biz_month) '-01 '作为业务日期,

a.产品标识,

SUM(CAST(VALUE1 AS NUMERIC(38,8))) sales_volume,

SUM(SUM(CAST(value 1 AS NUMERIC(38,8)))over(partition by a . customer _ id)AS all _ sales _ volume

访问量_计数为空

从TB _进口_销售a

其中,客户标识不为空

并且。产品标识不为空

而a.month='2016-11 '

按客户标识分组,

a.产品标识

联合所有

选择客户标识,

max(a.business_date)作为业务日期,

生产标识,

空,

空,

计数(*)作为访问计数

从TB_CALL_STORE a WITH(NOLOCK)

交叉应用

使用(诺洛克)从TB _产品中选择前1名产品标识

)p

内部联接TB _时间d

商务日期=商务日期

其中d.section='2016-11 '

按客户标识、生产标识分组

)v

按五.客户标识分组,

五。产品标识

由于代码本身比较简单,没办法再进一步简化,而由于连接不了服务器,其他的方法也用不上,甚至没办法分析到底是什么导致运行这么慢。

想了想,完全连接本质上就是2次左联合工会,无非就是合并数据,于是尝试一下用联合所有来直接合并数据,现在改成尤宁所有最后,就不需要完全加入。

但是考虑到第2段代码中并没有产品标识这个字段,所以这里在第2段代码加上了交叉应用随便取出一个产品的id,这样就有产品标识这个字段,可以合并了。

修改之后,果然速度降到了10多秒。

到此这篇关于结构化查询语言优化实战把完全连接改为左联合所有(从5分钟降为10秒)的文章就介绍到这了,更多相关左联合所有内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用sql语句实现查询排序,顺序和倒序的区别,sql按倒序排序
  • 使用sql语句实现查询排序,顺序和倒序的区别,sql按倒序排序,使用SQL语句实现查询排序,顺序和倒序
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 一篇文章带你入门sql编程语句,一篇文章带你入门sql编程题
  • 一篇文章带你入门sql编程语句,一篇文章带你入门sql编程题,一篇文章带你入门SQL编程
  • window无法启动mysql 1067,windows无法启动mysql57服务,错误1053
  • window无法启动mysql 1067,windows无法启动mysql57服务,错误1053,windows无法启动MySQL服务报错1067的解决方法
  • vb中adodb连接数据库,,VB语言使用ADO连接、操作SQLServer数据库教程
  • sql重复记录查询的几种方法有哪些,查询重复记录sql语句
  • sql重复记录查询的几种方法有哪些,查询重复记录sql语句,SQL重复记录查询的几种方法
  • sql语句的各个关键字的解析过程详细总结怎么写,sql语句的各个关键字的解析过程详细总结图
  • sql语句的各个关键字的解析过程详细总结怎么写,sql语句的各个关键字的解析过程详细总结图,SQL语句的各个关键字的解析过程详细总结
  • sql语句游标,sqlserver游标的使用
  • sql语句游标,sqlserver游标的使用,详解SQL游标的用法
  • 留言与评论(共有 条评论)
       
    验证码: