zoukankan      html  css  js  c++  java
  • Cardinality (基数)

    名词

    Cardinality:
        优化器在计算成本的时候,需要从统计信息中取得数据,然后去估计每一步操作所涉及的行数,叫做Cardinality。
        比如,一张表T有1000行数据,列COL1上没有直方图,没有空值,并且不重复的值(distinct value)有500个。那么,在使用条件“WHERE COL1=<VALUE>”去访问表的时候,优化器会假设数据均匀分布,它估计出会有1000/500=2行被选出来,2就是这步操作的Cardinality。
        通常情况下,Cardinality越准确,生成的执行计划就会越高效。
     

    适用情况

    Oracle只针对下面情况开启CFB:
    o 没有收集表的统计信息,并且dynamic sampling 也没有开启。
    或者
    o 查询条件复杂(比如条件有函数)或者涉及多列,但却没有收集扩展的统计信息(extended statistics)
    在这几种情况下,CBO是无法估算出准确的Cardinality的。
     

    过程描述

    1. 针对上述情况,Oracle会监控操作的实际行数(A-Row),然后对比CBO估算的行数(E-Row)。
    2. 如果两个值相差很大,就记录实际行数(A-Row),做上标记。下次执行时再次进行硬解析,根据实际行数来重新生成执行计划。
    3. 如果两个值相差不大,CBO就不再监控这条SQL语句。
     

    验证

    如果你在执行计划的最后看到下面这段文字,说明这个执行在生成时启用了CFB。
    Note
    -----
    - cardinality feedback used for this statement

    禁用

    如果你被这个特性困扰,那么可以把它关闭。 具体操作请参考Note 1344937.1

    参考

    Cardinality Feedback - Frequently Asked Questions (Doc ID 1344937.1)
  • 相关阅读:
    如何将已有的本地Git 库推送到远端仓库?
    2017(秋)软工作业: (4)用户体验分析
    微信公众号UX分析—— 学生作业小结
    2017(秋)软工作业: (3)用户体验分析
    珞珈旧时光
    用scp这个命令来通过ssh传输文件
    课堂讨论:分析软件
    2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进
    地铁口的零钱箱:
    Swagger .Net配置
  • 原文地址:https://www.cnblogs.com/xuzhiwei/p/4058767.html
Copyright © 2011-2022 走看看