zoukankan      html  css  js  c++  java
  • 11G新特性 -- Expression Statistics

    当在查询中使用了function,返回值会受到影响。

    比如:

    select count(*) from customers where lower(cust_state_province)='ca';

    优化器只知道原先列上的统计信息,而不知道被lower函数转后以后的统计信息,列的选择性会受到影响,但是优化器去无法得知。 对于sql语句谓词中的列使用了函数以后,优化器会简单的认为该列的选择性为1%。这样就会导致执行计划发生改变。

    在oracle 10g中,只会针对几种列的表达式进行Expression Statistics收集。如表达式要能保持数据的分布特征和列的分布特征相同,比如to_number()。

    在oracle 11g中,数据库使用Expression Statistics,包括用户定义的函数、基于索引的函数。该新特性依赖虚拟列来创建表达式统计信息。

    创建Expression Statistics

    SQL> select dbms_stats.create_extended_stats(null,'customers','(lower(cust_state_province))') from dual;
    
    DBMS_STATS.CREATE_EXTENDED_STATS(NULL,'CUSTOMERS','(LOWER(CUST_STATE_PROVINCE))'
    --------------------------------------------------------------------------------
    SYS_STUBPHJSBRKOIK9O2YV3W8HOUE
    
    或者
    SQL> exec dbms_stats.gather_table_stats(null,'customers',method_opt => 'for all columns size skewonly for columns (lower(cust_state_province)) skewonly');

    查看

    SQL> select extension_name,extension from dba_stat_extensions where table_name='CUSTOMERS';
    
    EXTENSION_NAME                 EXTENSION
    ------------------------------ --------------------------------------------------------------------------------
    SYS_STUBPHJSBRKOIK9O2YV3W8HOUE (LOWER("CUST_STATE_PROVINCE"))

    删除

    SQL> exec dbms_stats.drop_extended_stats('sh','customers','(lower(cust_state_province))');
  • 相关阅读:
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    C语言博客05--指针
    DS博客作业07--查找
    DS博客作业06--图
    DS博客作业05--树
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实验
  • 原文地址:https://www.cnblogs.com/abclife/p/4747860.html
Copyright © 2011-2022 走看看