一尘不染

Oracle执行计划成本与速度

sql

在Oracle中构建和调整查询时,速度通常是开发人员最关心的问题。但是,在调整特定查询时,我最近尝试了FIRST_ROWS和NO_CPU_COSTING提示,并且生成的执行计划的执行时间比以前的计划快80%,但成本却高出300%。执行计划中的I/ O很少,而且所有额外的开销似乎都来自两个视图之间的嵌套循环外部联接。

此查询是分页的,因此我只需要前几百行。缺乏有效的I /O,使我认为此查询将不依赖于缓存,乍一看,这似乎是可行的方法。但是,由于我从未见过查询会同时增加速度
成本,因此我不确定使用此查询可能有什么弊端。有吗


阅读 157

收藏
2021-05-16

共1个答案

一尘不染

对于带有等值联接的查询,这是非常典型的查询,当需要完整的数据集时,该查询已优化为使用哈希联接,而当只需要前几行或按on排序时,则使用嵌套循环。可以更有效地将索引用于子集的完整日期集。

当然,如果优化器不知道您将只使用行的子集,那么它就不会给出您将要实际执行的查询的成本,因为它包括了所有从不执行的嵌套循环操作的成本。要执行。

但是,估计成本没有什么不对的地方,仅此而已。如果您想为自己的理解提供一个更有意义的数字,请使用rownum限制。

顺便说一下,不赞成使用FIRST_ROWS,而推荐使用first_rows(1),first_rows(10),first_rows(100)或first_rows(1000)。

2021-05-16