【问题标题】:How to interpret Cost vs Bytes in Oracle explain plan?如何解释 Oracle 解释计划中的 Cost vs Bytes?
【发布时间】:2020-10-16 23:57:56
【问题描述】:

我有一个查询,我在两个表之间进行连接,并且有很多过滤器。 我运行解释计划,我明白了

cost:214, Bytes: 6154, Cardinality:67

为了降低成本,我在一列上创建了一个基于函数的索引,该列之前也用作查询中的过滤器之一。我收集了表统计信息,然后收集了索引统计信息。现在,我再次运行解释计划。这次我看到了

cost:214, Bytes: 122604, Cardinality:1202

我的问题:成本和字节之间有什么关系?为什么字节数和基数增加?创建基于函数的索引不应该稍微降低成本吗?

有人可以帮我理解一下吗?

【问题讨论】:

  • 要回答所有问题,请发布 SQL 查询和 EXPLAIN PLAN 输出。

标签: oracle sql-execution-plan


【解决方案1】:

SQL 调优指南中记录了成本(但不是字节数):

优化器成本模型考虑了 预计将使用查询。

成本是一个内部数值度量,表示估计的 计划的资源使用情况。成本特定于 优化器环境。为了估计成本,优化器考虑 如下因素:

System resources, which includes estimated I/O, CPU, and memory

Estimated number of rows returned (cardinality)

Size of the initial data sets

Distribution of the data

Access structures

注意:

成本是优化器用来比较的内部度量 同一查询的不同计划。您无法调整或更改成本。

执行时间是成本的函数,但成本不等于 直接到时间。例如,如果查询 A 的计划具有较低的 成本高于查询 B 的计划,则以下结果是 可能:

A executes faster than B.

A executes slower than B.

A executes in the same amount of time as B.

因此,您无法将不同查询的成本与一个查询进行比较 其他。此外,您无法比较语义等价的成本 使用不同优化器模式的查询。

Query optimizer concepts in SQL tuning guide

不要忘记 EXPLAIN PLAN 只是估计的计划。 要检查实际计划的实际执行情况,请使用 DBMS_XPLAN.DISPLAY_CURSOR 或 SQL 跟踪。

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2013-02-02
    • 2019-08-12
    • 1970-01-01
    • 2012-04-16
    相关资源
    最近更新 更多