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

Oracle 19C 关于表达式统计

原创 Asher.HU 2021-02-04
663
子句具有使用表达式的谓词时,称为表达式统计信息的扩展统计信息的类型将改进优化程序的估计WHERE

对于应用于子句列的形式表达式除非存在基于函数的索引,否则优化器不知道此函数如何影响谓词基数。但是,您可以收集有关表达式本身的表达式统计信息(function(col)=constant)WHERE(function(col)

下图显示了优化器使用统计信息来为使用函数的查询生成计划。顶部显示优化器检查该列的统计信息。底部显示了优化程序检查与查询中使用的表达式相对应的统计信息。表达式统计产生更准确的估计。

图14-2表达式统计

如图14-2所示,当表达式统计信息不可用时,优化器可能会产生次优计划。

本节包含以下主题:

也可以看看:

Oracle Database SQL语言参考以了解SQL函数

父主题: 管理表达式统计

14.2.1.1表达式统计有用时:示例

sh.customers的以下查询显示3341个客户位于加利福尼亚州:

sys@PROD> SELECT COUNT(*) FROM sh.customers WHERE cust_state_province='CA';
 
  COUNT(*)
----------
      3341

考虑LOWER()应用功能的同一查询的计划

sys@PROD> EXPLAIN PLAN FOR
  2  SELECT * FROM sh.customers WHERE LOWER(cust_state_province)='ca';
Explained.

sys@PROD> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------
Plan hash value: 2008213504

-------------------------------------------------------------------------------
| Id  | Operation         | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |           |   555 |   108K|   406   (1)| 00:00:05 |
|*  1 |  TABLE ACCESS FULL| CUSTOMERS |   555 |   108K|   406   (1)| 00:00:05 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(LOWER("CUST_STATE_PROVINCE")='ca')

因为不存在的表达式统计信息LOWER(cust_state_province)='ca',所以优化器估计值明显不正确。您可以使用DBMS_STATS过程来更正这些估计。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论