当Oracle估计某些查询的“成本”时,它是否实际查看表中的数据量(行)?
例如:
如果我正在对员工进行名称='Bob'的全表扫描,是通过计算现有行数来估算成本,还是总是设定成本?
答案 0 :(得分:4)
成本优化程序使用段(表和索引)统计信息以及估计值的系统(cpu + i / o性能)统计信息。虽然这取决于数据库的配置方式,但从10g开始,段统计信息通常由调用DBMS_STATS包的进程每天计算一次。
答案 1 :(得分:3)
在默认配置中,Oracle将检查表统计信息(您可以通过查询ALL_TABLES
视图查看 - 请参阅列NUM_ROWS
)。通常,通过查询部分或全部表来定期运行Oracle作业以重新收集这些统计信息。
如果尚未收集统计信息,优化器将(根据optimizer_dynamic_sampling
参数)在表上运行快速样本查询,以计算对该行中行数的估计表
(更准确地说,扫描表格的成本不是根据行数计算的,而是计算表格中的块数(您可以在BLOCKS
列的ALL_TABLES
列中看到它取这个数字并将其除以与多块读取计数相关的因子来计算该部分计划的成本。)