我在 Oracle 数据库中的 select 查询中的查询性能问题

query performance issue in my select query in oracle database

我的查询有 ordered 提示。它低于 costcardinality

当我删除有序提示时,它开始给出低于成本和基数的值。

就性能而言,哪个方案更好?如果需要,我可以提供更多详细信息,包括查询。我不是在说别人对我的工作,但即使是最小的建议也会对我很有帮助。

通常成本比较足以说明使用提示是否有意义。当正确收集统计信息时,提示通常会使情况变得更糟。

所以,查询成本越低越好。

我总是关注 cpu、逻辑读取(从 RAM 读取)和物理读取(从磁盘读取)的用法。更好的选择使用更少的资源。

无法仅根据成本来判断哪个更快。成本只是优化器估计以某种方式执行查询所需的工作量。这将取决于您的统计信息和查询(以及优化器数学)。如果您的统计信息不代表数据或您的查询具有无法估算的过滤器:您将得到误导性的成本计算。你需要记住的是 Garbage In - Garbage Out,即糟糕的统计数据会给你一个糟糕的计划。

如果您输入提示,通常意味着优化器提出的执行计划不够好。在那些情况下,您实际上是在说 Oracle 的成本计算是错误的 - 所以我们绝对不应该用它来查看哪个查询更快。

幸运的是,您拥有确定哪个查询更快所需的一切 - 您拥有数据库和查询,只需执行它们并查看即可。

我怀疑两者都不是特别快,但如果你想改进它们,你将需要查看执行它们的工作真正进行的地方。这些查询的最终成本非常高,所以它可能已经正确地识别了一个不可避免的(基于查询的编写方式和存在的结构)高成本操作。自己阅读执行计划并考虑每一步需要付出多少努力总是一个好主意。

开始调整它的简单方法是获取完整执行的行源执行统计信息,并针对计划中负责最实际时间的部分。请参阅 https://ctandrewsayer.wordpress.com/2017/03/21/4-easy-lessons-to-enhance-your-performance-diagnostics/ 的第 3 部分和第 4 部分了解如何做到这一点——如果有的话,它会给你一些你可以分享的东西,可以给出具体的建议(如果你分享它,那么不要忘记包括完整的查询).