gpt4 book ai didi

sql - 管理非常大的 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 18:06:48 25 4
gpt4 key购买 nike

我正在寻找一些在 Oracle 中管理非常大的 SQL 查询的想法。

我的雇主希望为每个报告构建非常广泛的报告(150 - 200 列)数据。
每个项目都是一个子查询或 View 中的一个元素。数据必须是实时的,因此 DW 风格的批处理不是一种选择。我们也不使用任何 BI 工具,只是一个生成 Excel 的 Java 应用程序(它要求在 Excel 中输出数据)

该查询还包含联合作为来自其他系统的提要。
查询会产生非常大的 SQL(大约 1500 行),很难管理。

我可以采用哪些策略来使工​​作更易于管理?

这也不是性能问题。我能够将查询优化为非常有效,它主要是查询的宽度,管理 200 列本身就是一个挑战。

最佳答案

我每天处理这么长的查询,这里有一些帮助我管理它们的方法:

第一个别名这些列中的每一个。当您构建它时,您可能知道每一列的来源,但是当需要进行更改时,准确了解每一列的来源非常有帮助。这适用于连接条件、分组依据和 where 条件以及选择列。

组织成易于理解和可测试的块。我使用临时表将有意义的东西放在一起,这样我就可以在测试模式下在最终查询之前看到结果。

这让我进入测试模式。如果我有大量数据,我会使用测试模式设计 proc,然后在测试模式下查询各个临时表,这样我就可以看到数据出错的地方(如果有错误)。不确定 Oracle 是如何工作的,但在 SQL Server 中,我将此作为最后一个参数并为其提供默认值,以便应用程序不需要传入它。

考虑记录执行细节和传入参数的值,当然也记录任何错误消息。当您必须解决为什么这个已经完美运行六年的报告对这个用户不起作用时,这将非常有帮助。

将每一列放在单独的行上,并对 where 子句执行相同的操作。有时,您可能必须通过注释掉连接来进行故障排除,直到找到导致问题的连接为止。如果您也可以轻松地注释掉相关字段,那就更容易了。

如果您没有技术设计文档,那么至少使用注释来解释您的思考过程。您想了解任何评论中的原因而不是方式。即使你写了这些东西,以后也很难再回来理解。给 future 的自己一些帮助。

在从头开始开发时,我将选择列表放入,然后评论除第一项之外的所有内容。然后我只构建查询直到我得到那个值 - 测试直到我确定我得到的是正确的。然后我添加下一个和任何连接或我可能需要获取它的条件。再次测试以确保它是正确的。 (哎呀,为什么当我添加它时,它从 1000 条记录变成了 20000 条?嗯,也许我需要在那里处理一些事情,或者是这样吗?)一次只添加一件事,你会发现逻辑中的错误很多更快,对您的结果更有信心。与尝试一次性构建大量查询相比,它花费的时间也更少。

最后,没有什么可以替代理解您的数据。有很多复杂的查询有效但没有给出正确的答案。知道您是否需要内连接或左连接。了解获取所需记录所需的条件。知道当您有一对多关系时如何处理记录(这可能需要推迟要求);您应该有 3 行(每个子记录一个),还是应该将该数据放在逗号分隔的列表中,或者您应该只选择众多记录中的一个并使用聚合有一行。如果是后者,选择要保留的记录的标准是什么?

关于sql - 管理非常大的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com