代码之家  ›  专栏  ›  技术社区  ›  Will

关于Oracle解释计划中成本的问题

  •  2
  • Will  · 技术社区  · 14 年前

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

    例如:

    如果我对name='bob'的雇员进行全表扫描,它是通过计算现有行的数量来估计成本,还是始终是一个固定成本?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jeffrey Kemp    14 年前

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

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

    (更准确地说,扫描表的成本不是根据行数计算的,而是根据表中的块数(您可以在 BLOCKS 所有表格 )它将这个数字除以与多块读取计数相关的系数,以计算该计划部分的成本。)

        2
  •  4
  •   dpbradley    14 年前

    成本优化器使用段(表和索引)统计信息以及系统(CPU+I/O性能)统计信息进行估计。尽管这取决于数据库的配置方式,但从10g开始,段统计信息通常每天由调用dbms_stats包的进程计算一次。