一个查询(报表)优化案例

原创 2016年11月19日 17:00:34

环境:SQL Server 2012 SP1

一个查询(报表),返回约6千条记录,运行44秒,涉及十几个表的LEFT JOIN,其实每个表的数据量并不大,几万,多的也才几十万,类ERP系统

查询代码像这个样子:

Select T1.Col1,....Tn.ColN

  From T1 LEFT JOIN T2 ON ...

            LEFT JOIN T3 ON (T1.Src=T3.Src and T1.Target=T3.Target) OR (T1.Target=T3.Src and T1.Src=T3.Target)....

            LEFT JOIN Tn....


话说这个T3也接近6万行,存储的是两个城市之间的距离。

初次将T3改写为:

LEFT JOIN (Select Src,Target From T3

                      UNION

                      Select Target,Src From T3) T3 On T1.Src=T3.Src and T1.Target=T3.Target

执行时间减少到9秒


再次将查询拆分为3次,一次LEFT JOIN 5、6个表,也就是先LEFT JOIN 5、6个到临时表,再由临时表LEFT JOIN 5、6个表再存入临时表,

再次类似处理。。。


最终执行时间为 2~3 秒。告以段落


还可以将两个城市间的数据实体化,因为城市基础数据很少变动,即使变动稍作加工就成,会减少 UNION 那步成本消耗


原因也很简单,一次LEFT JOIN太多,SQL SERVER优化器可能会找不到优化的执行路径、策略,很难估算出结果可能会有多少,很容易把

优化器搞糊了(不管是SQL SERVER还是ORACLE,都一样。MySQL就更不用说了,复杂些的SQL只能让其尴尬+为难)

大数据表的查询优化方案

转载自:http://www.2cto.com/database/201411/348519.html 如果有一张大表,表中的数据有几百万、几千万甚至上亿,要实现实时查询,查询的结果...
  • zhangzhangjava
  • zhangzhangjava
  • 2017年07月13日 10:37
  • 325

关于大数据量查询报表优化

针对数据量巨大的报表查询,总结了一下几个处理方法: 看一个运用案例:多粒度(年月日,省、地市、热点、ac、ap)下每天20W条,每月800W条,自由选择35天内数据的查询。 直接查询页面崩溃,...
  • HUXU981598436
  • HUXU981598436
  • 2014年07月26日 22:41
  • 1408

优化SQL执行路径提高报表性能

报表出现性能问题需要对数据源计算进行优化时,执行路径难以确定从而被干预是阻碍报表优化的难题之一。由于数据库执行路径对开发人员不透明,报表优化需要指定执行路径时,程序员会很难甚至无法干预。而一般报表工具...
  • u012388497
  • u012388497
  • 2015年01月09日 10:36
  • 943

报表性能优化方案之报表取数

1. 取数原理 设计器拼出最终的SQL,将SQL语句传给数据库,数据库执行,将数据返回给设计器。 由于计算过程首先要通过SQL语句从数据库中取数据,我们可以通过控制数据量的大小和对数据的提...
  • nayun123
  • nayun123
  • 2015年09月21日 10:31
  • 701

业务报表速度优化

业务报表速度优化对大数据量的业务报表做速度优化是用户经常提的需求,特别是大型的ERP系统中的报表。下面是我在过程中优化报表生成速度使用几个方法:1.减少与数据库的交互:减少与数据库的交互是非常有效的优...
  • ltd_tomato
  • ltd_tomato
  • 2006年05月18日 21:30
  • 912

Sql server 2008查询性能优化学习笔记一

一、在调整过程中,必须检查各种可能影响基于Sqlserver的应用程序性能的硬件和软件因素。你应该在性能分析中问自己以下的问题: 1.相同服务器上有没有运行其他的资源密集型应用? 2.硬件子系统是否能...
  • younger_z
  • younger_z
  • 2015年09月09日 10:19
  • 580

报表系统结构优化之中间数据外置

绝大多数报表项目的数据库中,除了支撑系统运行的业务数据表之外,还有很多中间表。业务数据表是报表系统必须的基础数据表,是支持报表系统运行的持久化数据层,例如:销售报表系统中的订单、客户、产品等等。报表中...
  • u012388497
  • u012388497
  • 2015年06月05日 09:24
  • 904

加快FineReport报表设计的几个心得体会

一、从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度。否则每次设计时模板均要从远程读取数据,速度相当慢!! 二、找一个富文本编辑软件(如NOTEPA...
  • yuanziok
  • yuanziok
  • 2015年03月25日 17:16
  • 1436

数据分析FineReport优化报表取数

数据分析FineReport优化报表取数 1. 取数原理 设计器拼出最终的SQL,将SQL语句传给数据库,数据库执行,将数据返回给设计器。 由于计算过程首先要通过SQL语句从数据...
  • best_report
  • best_report
  • 2015年05月12日 09:46
  • 711

总帐明细账查询报表--案例

(原帖) --总帐明细账查询报表--案例--selectleft(claro,2) 整理于西安,-06-06 01:45:12.750/** MicrosoftSQL Server 2008 (RTM...
  • claro
  • claro
  • 2009年06月06日 01:37
  • 2186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个查询(报表)优化案例
举报原因:
原因补充:

(最多只允许输入30个字)