![]() |
1
7
这里的凶手是
这对您的数据库来说是一件残忍、残酷的事情,虽然我可能会使您的查询看起来更漂亮,但是如果您被迫根据此查询所暗示的特定可用数据集生成信息,那么您就无法从性能问题中解脱出来。 这里的内容不是重构/优化问题,而是一个严重的设计问题。实际上,你有两个问题。较小的问题是,您正在将业务逻辑编码到数据层中;较大的问题是,系统的设计并不是为了跟踪它实际需要的所有信息。
基本上
全部的
您在此查询中生成的信息应保存在某种类型的应收历史记录表中,该表记录每个交易的这些汇总/统计信息。该表可以由应用程序本身或您的
可能不是您要寻找的答案,但实际上我已经完成了重构的一半,这时我意识到不可能删除
事实上,产生这些结果的最快方法可能是使用光标,因为这样您就可以使用部分聚合并将其转换为O(N)操作。但是您真的想要一个光标在整个事务表上运行而不使用过滤器吗? 更新:
你可以通过写出整个
另外,我不得不说所有这些
|
![]() |
2
1
首先,学习格式化SQL,以便您(和我)可以阅读它:
第二,确保您有正确的索引——您需要能够读取SQL才能做到这一点。 |
![]() |
3
0
你对这个模式有什么看法吗?现在看来,您似乎正在尝试生成一个操作数据存储的报告,该操作数据存储本质上是事务性的。在许多大容量的场景中,创建一个不太规范的模式(称为决策支持数据库),并在特定的时间间隔内将事务数据复制/汇总到该数据库,这并不少见。然后,您可以针对DSS编写非常简单的查询,而您的高度规范化的ODS则继续运行。 |
![]() |
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 1 年前 |
![]() |
Nick Fleetwood · 调度语法的LINQ查询 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
Java · 使用交叉应用同时显示两列 3 年前 |