报表里有 4 个 SQL 数据集,SQL 在数据库里跑一共不到 10 秒,但报表查完很慢要几分钟,咋回事?「建议收藏」

报表里有 4 个 SQL 数据集,SQL 在数据库里跑一共不到 10 秒,但报表查完很慢要几分钟,咋回事?「建议收藏」你要确认一下执行完 SQL 结果是否都加载了,像 PL/SQL Developer 查完就只加载部分。 不过报表运行时间肯定是要比数据库查 SQL 慢的,如果慢很多可能是因为在报表里关联多个数据集导…

报表里有 4 个 SQL 数据集,SQL 在数据库里跑一共不到 10 秒,但报表查完很慢要几分钟,咋回事?

你要确认一下执行完 SQL 结果是否都加载了,像 PL/SQL Developer 查完就只加载部分。

不过报表运行时间肯定是要比数据库查 SQL 慢的,如果慢很多可能是因为在报表里关联多个数据集导致的。可以检查一下在报表单元格里是否有类似:ds2.select(name,id==ds1.cusid) 这样的表达式,表示数据集 2 和数据集 1 通过某个字段实现关联。

几乎所有报表工具在完成多数据集关联时都采用顺序遍历的方式实现,先拿一个数据集的第一条记录去第二个数据集中遍历查找符合条件的记录,然后是第二条,第三条…,数据量大的时候性能就会很低。画个图看一下:

png

在报表里关联这两个数据集就要遍历数据集 ds1 记录数(100 万)次数据集 ds2,总共比较 100 万 *1000 次。。。速度当然慢了。

要解决这个问题,得想办法把关联计算改到为报表准备数据那个阶段,方法有两个。

一、用 SQL 完成原来 4 个数据集的关联

写个复杂 SQL,把原来 4 个数据集的 SQL 整合成一句,让数据库完成关联计算(HASH JOIN),这样会快很多。当然这种做法有几个限制:

1、 不能跨库。如果原来的 4 个数据集来自不同数据库,就不能这么干了。异构源当然也不行;

2、 不能有存储过程。改造存储过程的成本太高,而且需要相应数据库权限;

3、 SQL 太复杂不好整合。有时报表的数据集 SQL 都很复杂,还带有很多参数(报表传过来的),很难整合到一起。其实这正是报表里要用多数据集的原因,报表工具支持多数据集会带来很多方便,但会影响性能。

二、直接用带强计算能力的报表工具

有一些报表工具带脚本计算能力,这样就可以事先关联完多个数据集。这样就改变了原来要么在数据库里关联(很多情况没法实现),要么在报表模板里关联(性能太低)的状况,性能往往能提升几倍到几十倍。

这个文章介绍了详细的实施过程: 如何提高多源关联报表性能 ,里面举的三个例子性能分别提升了 5 倍、26 倍和 44 倍,效果比较明显。

而且,这个工具有了脚本能力还支持跨库,文件、NoSQL 这些数据源,也能调用存储过程,解决了数据库面临的那些问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7858.html

(0)
上一篇 2023-03-12
下一篇 2023-03-12

相关推荐

  • 线上服务器cpu很高怎么排查问题_CPU怎么放

    线上服务器cpu很高怎么排查问题_CPU怎么放告警 正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误。查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%。 赶紧从会上下来,SSH登录

    2023-03-19
    147
  • 5分钟搞定 MySQL 到 Greenplum / PostgreSQL 数据迁移同步

    5分钟搞定 MySQL 到 Greenplum / PostgreSQL 数据迁移同步简述 本文主要介绍如何使用 CloudCanal 构建一条 MySQL 到 Greenplum / PostgreSQL 的数据同步链路。 支持版本 源端 MySQL 支持的版本为:5.6、5.7、8

    2023-06-18
    145
  • 用Python计算100的平方根

    用Python计算100的平方根Python中可以通过调用math模块中的sqrt()函数来计算一个数的平方根。在上面的代码中,我们导入了math模块,并使用sqrt()方法对100进行计算,最终打印出结果为10。

    2024-04-11
    77
  • MySQL学习笔记(17):MySQL Utilities[亲测有效]

    MySQL学习笔记(17):MySQL Utilities[亲测有效]本文更新于2020-04-05,使用MySQL 5.7,操作系统为Deepin 15.4。 安装 MySQL Utilities需单独安装,如使用apt-get命令: apt-get install

    2023-03-20
    145
  • Python Numbers:实用的数学计算工具

    Python Numbers:实用的数学计算工具在Python中,数值类型包括整型、浮点型、复数型。整型是整数类型,浮点型是带有小数点的数字类型,复数型是由实数和虚数组成的数字类型。Python中的数字类型可以与其他类型进行各种计算操作,如加法、减法、乘法、除法等,这使得Python成为了实用的数学计算工具。

    2024-03-18
    82
  • hudi clustering 数据聚集(一)「建议收藏」

    hudi clustering 数据聚集(一)「建议收藏」概要 数据湖的业务场景主要包括对数据库、日志、文件的分析,而管理数据湖有两点比较重要:写入的吞吐量和查询性能,这里主要说明以下问题: 1、为了获得更好的写入吞吐量,通常把数据直接写入文件中,这种情况下

    2023-04-27
    178
  • 第二章关系数据库答案_关系数据库管理系统

    第二章关系数据库答案_关系数据库管理系统2.1关系数据结构形式化定义: 2.1.1关系: 单一的数据结构 – 关系: 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构 – 二维表: 从用户的角度,关系模型中的数据的逻辑结构是一张二

    2023-06-10
    133
  • 使用DataGrip/DbVisualizer连接达梦8数据库[通俗易懂]

    使用DataGrip/DbVisualizer连接达梦8数据库[通俗易懂]安装达梦windows版数据库时,会附带安装一个数据库管理工具。这个工具是我知道的,最全面的达梦数据库可视化数据操作工具。、 除了支持常规的dml操作外,还支持存储过程开发与调试,同时提供了简单的操作

    2023-03-11
    167

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注