其他分享
首页 > 其他分享> > 【看懂执行计划】基于成本的优化器(CBO)

【看懂执行计划】基于成本的优化器(CBO)

作者:互联网

基于代价的优化方式(Cost-Based Optimization,简称CBO)

  CBO选择目标SQL执行计划的判断原则是成本,从目标SQL的诸多执行计划中选取成本值最小的执行路径为其执行计划,各执行路径的成本值是根据目标SQL中涉及到的表、索引、列等相关对象的统计信息计算出来的,实际反应执行目标SQL所要消耗的I/O、CPU和网络资源的一个估计值。

CBO组成

  1. 选择性(Selectivity):是指施加制定谓词条件后返回结果集的记录数占未施加任何谓词条件的原始结果集的记录数的比率。选择率的值越大,就意味着返回结果集的Cardinality值就越大,所以估算出来的成本值也就越大。

选择率的计算公式

目标列上没有直方图且没有NULL值的情况下,对目标列做等值查询时

    Selectivity = 1 / NUM_DISTINCT
    ※ NUM_DISTINCT表示目标列的distinct值的数量

  1. 集的势(Cardinality):指集合所包含的记录数。实际上表示对目标SQL某个具体执行步骤的执行结果所包含记录数的估算。某个执行步骤的Cardinality值越大,那么它所对应的成本值也就越大,这个执行步骤所对应的执行路径总成本值也就越大。

CBO估算Cardinality公式

    Computed Cardinality = Original Cardinality * Selectivity
    ※ Computed Cardinality:施加指定谓词条件后返回结果集的记录数
    ※ Originad Cardinality:未施加任何谓词条件的原始结果集的记录数
    ※ Selectivity:选择率

CBO的局限性

  1. CBO会默认目标SQL语句where条件中出现的各列之间是独立的,没有关联关系
  2. CBO会假设所有的目标SQL都是单独执行的,并且互不干扰
  3. CBO对直方图统计信息有诸多限制
  4. CBO在解析多表关联的目标SQL时,可能会漏选正确的执行计划

在这里插入图片描述

标签:基于,执行,CBO,目标,Selectivity,SQL,Cardinality,优化
来源: https://www.cnblogs.com/henry-chr/p/14679575.html