暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 基于统计的查询转换

原创 Asher.HU 2021-02-04
599


在某些情况下,Oracle数据库可以通过查询表统计信息而不是表本身来满足查询。

基于统计信息的转换的优点是表统计信息通常比表小得多。元数据查询的性能不依赖于表中的行数,因此在大型表中可以更好地扩展。

表统计信息包括行数和列级详细信息,例如最小值和最大值以及不同值(NDV)的数量。如果数据库知道统计信息是最新的,则数据库可能会使用统计信息回答某些查询。数据库是否选择转换取决于几个内部因素,其中包括:

  • 汇总类型

    例如,聚合可以是MINMAXCOUNT,或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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论