【问题标题】:Question about Cost in Oracle Explain PlanOracle解释计划中的成本问题
【发布时间】:2011-02-04 11:43:22
【问题描述】:

当 Oracle 为某些查询估算“成本”时,它实际上是否查看表中的数据量(行)?

例如:

如果我对 name='Bob' 的员工进行全表扫描,它是通过计算现有行的数量来估计成本,还是总是设定成本?

【问题讨论】:

    标签: sql performance oracle optimization


    【解决方案1】:

    成本优化器使用段(表和索引)统计信息以及系统(cpu + i/o 性能)统计信息进行估算。虽然这取决于您的数据库的配置方式,但从 10g 起,段统计信息通常由调用 DBMS_STATS 包的进程每天计算一次。

    【讨论】:

      【解决方案2】:

      在默认配置中,Oracle 将检查表统计信息(您可以通过查询ALL_TABLES 视图来查看 - 请参阅列 NUM_ROWS)。通常,Oracle 作业会定期运行,以通过查询部分或全部表来重新收集这些统计信息。

      如果尚未收集统计信息,优化器将(取决于optimizer_dynamic_sampling 参数)对表运行快速示例查询,以计算该表中行数的估计值。

      (更准确地说,扫描一张表的成本不是根据行数计算的,而是根据表中的块数计算的(可以在ALL_TABLESBLOCKS 列中看到)。它将这个数字除以与多块读取计数相关的因子,以计算该部分计划的成本。)

      【讨论】:

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