sql - 对于非常复杂的报告,人们有时会使用他们的语言而不是 sql 进行编码吗?

标签 sql database performance reporting

我有一些非常复杂的报告要写。其中一些...我不确定如何只为其中一个值编写 sql 查询,更不用说将它们填充到单个查询中了。

仅提取大量数据并通过代码计算所有数据是否很常见?还是我应该尝试找到一种方法使所有报告都依赖于 sql?

我有一个非常丰富的领域模型。事实上,可以扩展部分代码以准确计算他们想要的内容。实际的逻辑并没有那么难写——使用我的域模型比使用 SQL 更好。使用 SQL,编写业务逻辑、重构它、测试它并将其置于版本控制中是一件非常痛苦的事情,因为它与您的实际代码是分开的。

例如,他们想要的统计数据之一是他们进步的百分比,尤其是与同一类(class)、同一所学校的其他人以及与其他学校相比时的进步百分比。这需要对他们过去如何根据最新信息进行非常详细的分析,以及对您作为整体进行比较的组进行计算。我什至无法想象 sql 查询会是什么样子。

问题是,这个 % 改进不是数据库中的一个列 - 它本身涉及通过实时分析所有实时数据进行的大量计算。没有办法将此数据缓存在列中,因为每次学生做某事时都需要对每一行进行此计算是疯狂的。

不过,我有点害怕提取成百上千条记录来获取这些数字。我可能不得不抽出那么多只是为了找出 1 个用户的 1 个值......如果他们想要在一个屏幕上为所有用户提供一份报告,它基本上需要分析整个数据库。而这只是他们想要在报告中显示的许多列中的 1 列值!

基本上,无论我选择用什么方法编写,他们想要的报告都是一个巨大的性能消耗。

不管怎样,我想问一下你用过什么样的解决方案来解决这类问题。

最佳答案

有时可以通过单个查询生成报告。有时必须编写一些程序代码。有时,即使可以使用单个查询,编写一些过程代码也会更好/更快/更清晰。

恰当的例子 - 另一位开发人员在工作中编写了一份使用单个查询的报告。那个查询太棒了 - 把 table 翻过来,做了一些惊人的求和 - 并且很可能通过超空间管道输出 - 真正的艺术作品。我什至无法想象会做那样的事情,只是从准备中学到了很多东西。唯一的问题是它需要 45 分钟才能运行,并在此过程中使系统崩溃。我喜欢那个查询...但最后...我承认 - 我杀了它。 ((呜咽!))我边哼着《 hell 之路》边用电锯把它肢解了!我......我写了一些程序代码来掩盖我的踪迹......没有人注意到。我想说我很抱歉,但是......最终工作在 30 秒内完成。哦,当然,说“但是性能很重要,你知道”很容易......但是......我喜欢这个问题......((吸 Nose ......))有人看到我的电锯......? >;->

上面的要点是“让事情尽可能简单,但不要更简单”。如果您发现自己有一个涵盖三页的查询(我喜欢那个查询,但是...)也许它试图告诉您一些事情。一个更简单的查询和一些过程代码可能占用大约相同的页面空间,但可能更容易理解和维护。

分享和享受。

关于sql - 对于非常复杂的报告,人们有时会使用他们的语言而不是 sql 进行编码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3913686/

相关文章:

SQL查询以根据最新日期从单个列中删除重复项

c - 改进快速排序

performance - CSS3 - 性能最佳实践是什么?

php - MYSQL:除最高和最低值外的总计值然后相乘

java - 无法从 SQLite 数据库中选择图像 (Android)

java - 超过 READ COMMITTED 锁等待超时

mysql - 如何在 mysql 中修复或删除/创建损坏的表?

javascript - 制作动画时防止 javascript gc

sql - 如何动态选择在存储过程中选择哪个表(具有相同架构)

sql - pl/sql中有BEFORE SELECT触发器吗?