在某些情况下,Oracle数据库可以通过查询表统计信息而不是表本身来满足查询。
基于统计信息的转换的优点是表统计信息通常比表小得多。元数据查询的性能不依赖于表中的行数,因此在大型表中可以更好地扩展。
表统计信息包括行数和列级详细信息,例如最小值和最大值以及不同值(NDV)的数量。如果数据库知道统计信息是最新的,则数据库可能会使用统计信息回答某些查询。数据库是否选择转换取决于几个内部因素,其中包括:
- 汇总类型
例如,聚合可以是
MIN,MAX,COUNT,或APPROXIMATE_COUNT_DISTINCT。 - 统计的准确性
当数据可能与统计信息不匹配时,优化器将不执行转换。可能使统计信息不准确的因素包括部分(抽样)统计信息,上一次收集统计信息之后发生的DML,导入统计信息以及使用生成的人工统计信息
DBMS_STATS.SET_STATS。 - 查询类型
优化器统计信息不会保留有关一组值的聚合信息。例如,
WHERE子句谓词可能会阻止优化器选择转换。 - 查询位置
当查询在事务内部时,优化器无法选择转换。
示例5-5示例查询
假设该sales表有8100万行。您发出以下查询:
SELECT MAX(amt), MAX(volume) FROM sales;如果统计信息是最新的,则数据库可以将此查询转换为数据字典表查询。在以下计划中,带有前缀视图的视图VW_SQT_指示可以进行基于统计的转换:
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 636 (100)|
| 1 | VIEW | VW_SQT_65BBF4BE | 1 | 26 | 624 (76)| <---------基于统计的转换
| 2 | SORT AGGREGATE | | 1 | 7 | |
| 3 | PX COORDINATOR | | | | |
| 4 | PX SEND QC (RANDOM) | :TQ10000 | 1 | 7 | |
| 5 | SORT AGGREGATE | | 1 | 7 | |
| 6 | PX BLOCK ITERATOR | | 81M| 546M| 624 (76)|
| 7 | TABLE ACCESS FULL | SALES | 81M| 546M| 624 (76)|
--------------------------------------------------------------------------------该VW_SQT_65BBF4BE视图不能证明数据库是从数据字典中检索到统计信息的,因为DML语句可能阻止了它。该计划表明数据库可能已经扫描了sales表。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




