Cim*_*ity 5 oracle best-practices
我正在为我当前的雇主编写许多报告查询,利用 Oracle 的 With 子句让我自己创建简单的步骤,每个步骤都是面向数据的转换,它们相互构建以执行复杂的任务。
今天我注意到,过度使用 with 子句可能会对 Oracle 服务器的资源产生负面影响。
谁能解释为什么过度使用 oracle with 子句可能会导致服务器崩溃?或者指出我可以研究适当用例的一些文章?我开始大量使用 With 子句来为我的代码添加结构并使其更易于理解,我希望在这里提供一些有用的回复,我可以继续有效地使用它。
谢谢!
请记住 WITH 子句用于命名子查询,并且子查询逻辑可能会被滥用。WITH 的开销不应该比使用常规子查询多得多,但仍然不要尝试进行大量的嵌套。只要你对事情的深度有一个很好的了解,你应该没问题。
首先让我们注意,我并不了解 Oracle 实现的所有内部结构,但我非常了解 WITH 语句。
需要注意的一件事是 WITH 语句返回的结果集旨在在整个查询过程中保持稳定。换句话说,从逻辑上讲,它们会创建某种合成关系,您可以在查询的其他地方引用。我知道 Oracle 试图将这些作为子查询折叠起来,但在某些情况下可能无法正常工作。在这些情况下,无法跨越 WITH 语句边界优化代码的执行。在其他情况下,我看到由于有效的数学原因而破坏了 PostgreSQL 上的执行优化,并且假设 Oracle 在那里是相同的,因此 WITH 语句不是唯一的,并且问题始终与查询部分内结果的稳定性有关。
出于这个原因,尽管 Oracle 在规划 WITH 方面比 PostgreSQL 更好,但我预计也会有问题。
这不应该导致服务器崩溃,但它可能意味着更多的内存使用、更多的 CPU 使用和整体效率较低的查询计划。所以请记住 WITH 语句会导致性能问题。将它们放在有意义的地方。Oracle 也有许多其他方法来编码您的数据转换,但没有实际的具体示例,很难知道推荐什么。
归档时间: |
|
查看次数: |
9534 次 |
最近记录: |