2010-04-05 40 views
2

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

例如:

如果我做员工的名字=“鲍勃”的全表扫描,它估计通过计算现有的行量的成本,或者是它总是一套成本是多少?

回答

3

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

如果数据没有被收集(还),优化器将(取决于optimizer_dynamic_sampling参数),以计算在该表中的行数估计这个表上运行一个快速简单的查询。 (更准确地说,扫描表格的成本不是从行数来计算的,而是从表格中的块的数量(你可以在ALL_TABLESBLOCKS列中看到),它需要这个数字并将其除以与多块读取计数相关的因子以计算该部分计划的成本。)

+0

+1用于提及动态采样估计 – dpbradley 2010-04-06 12:36:21

4

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