为报告编写 SQL 查询有何不同?

Posted

技术标签:

【中文标题】为报告编写 SQL 查询有何不同?【英文标题】:How is writing SQL queries for reports different? 【发布时间】:2011-03-18 13:37:39 【问题描述】:

为报表编写 SQL 查询(通常每周运行一次、每月运行一次或不经常运行)与为每天运行多次的 Web 应用程序(或应用程序)编写查询有何不同?如果查询每月只运行一次,那么速度和性能就不是大问题,对吗?如何更频繁地使用 SQL 的各个方面(临时表、CTE 等)?

【问题讨论】:

【参考方案1】:

它们没有区别,并且适用于任何其他查询的相同考虑因素。

速度和性能是否是一个问题不是您的决定,而是报告用户的决定。

如果您的月度报告查询需要 3 个小时,在此过程中阻塞了多个表,并导致您的其他应用程序因为无权访问而停止,会发生什么情况?

【讨论】:

正如 Oded 所说,在许多情况下,您会发现您的“每月一次”报告需要比其他“应用程序”查询更精细,因为这些将是您的项目最终用户可能并非每天都需要,但它们很可能非常重要。 不经常报告来自高度活跃系统的大量数据往往会导致数据仓库解决方案。如果查询所有表需要几分钟(更不用说几小时),但在运行报告时正在使用新事务更新表,那么您可能遇到必须锁定系统的问题和/或无法两次生成相同的报告。将数据复制到其他地方(仓库)以获取单个时间点的所有数据,您可以生成不干扰事务系统的一致报告。【参考方案2】:

速度和性能通常是报告的一个更大的问题。您的平均 CRUD SQL 影响通常仅影响应用程序中的 1 条记录,搜索可能需要更多时间,但通常结果仅限于设定的行数。

报表可能需要汇总来自数百万条记录和 20-30 个连接的数据。编写不当会极大地降低系统速度,当然,当用户不得不等待 10 个小时才能获得他们要求的报告时,用户会变得非常暴躁。它也可能导致阻塞。然后你会遇到脏读问题,这可能会导致报告中出现更多问题。数据经常被存储以进行报告是有原因的,这通常是为了提高性能并防止报告打扰执行事务工作的用户。

为报告编写查询通常比几乎任何 SQL 访问不生成某种形式报告的 Web 应用程序更复杂且更难进行性能调整(由于复杂性)。我见过超过 500 行的报告查询。

【讨论】:

以上是关于为报告编写 SQL 查询有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

什么是 HSQLDB(Hyper SQL)以及它与其他数据库有何不同?

Yii2:如何编写不同的 SQL 查询?

2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com

2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com

32 位 MASM 模式与 64 位有何不同?

SQL Server中具有不同列数的多个查询的联合结果