oracle 查询之后统计数量_【数据库】基于代价的优化器引擎之统计信息

本文深入探讨了基于代价的优化器(CBO)中的统计信息,尤其是直方图在查询优化中的作用。文章介绍了统计信息的概念,包括行级和列级统计信息,强调了直方图对于选择率估算的重要性。直方图分为等宽和等高直方图,通过实例展示了它们如何帮助优化器生成更准确的执行计划,特别是在处理数据倾斜的列时。最后,文章总结了直方图的目标,并指出在实际环境中如何有效地收集统计信息。
摘要由CSDN通过智能技术生成

 摘要:本文主要讲述基于代价的优化器中统计信息直方图的作用和种类。主要内容如下:

  1. 概述

  2. 统计信息

  3. 直方图

  4. 结论

01

概述

基于代价的优化器引擎可能面临的问题和挑战如下。

  • 从可选的单表扫描方式中,挑选什么样的单表扫描方式是最优的?

  • 对于两个表连接时,如何连接是最优的?

  • 对于多个表连接,连接顺序有多种组合,哪种连接顺序是最优的?

  • 对于多个表连接,连接顺序有多种组合,是否要对每种组合都探索?如果不全部探索,怎么找到最优的一种组合?

那么碰到这些问题,我们如何解决呢,这里就引入了一个非常重要的功能叫做代价估算模型(Cost Model),我们用代价估算模型计算出各种情况下执行的代价,然后优化器选择一个代价最小的计划,来作为后续执行的计划。

代价估算模型能估算一个计划的代价大小,依赖一个非常重要的功能统计信息。那么我们先来了解下统计信息的基本概念。

02

统计信息

优化器统计信息是描述数据库中表和列的元数据信息的集合,它主要用来估计谓词的选择率和中间查询结果的大小,从而用于创建高质量的执行计划的基础。优化器统计信息主要包括行级别的统计信息和列级别的统计信息:

  • 行级别的统计信息:包括行的总数、行的平均长度、表在磁盘中占用了多少page等。

  • 列级别的统计信息:包括列的最大值、最小值、列中空值个数、列中非空值个数、不同值个数(Number of Distinct Value, 或NDV)和直方图等。

直方图与CBO的关系

从一个行源中评估返回行数所占的比例这就是选择率,选择率在CBO的查询优化中起着重要作用。选择率的取值范围是0到1之间。粗略的讲如果满足谓词条件的只有少量的行记录,那么CBO将更喜欢使用索引扫描,如果谓词条件要从表中获取大量数据那么CBO将更喜欢使用全表扫描。

比如下面的查询获取deptno等于10的所有雇员信息如果返回少量的记录查询将会更倾向于使用索引扫描:

SELECT  * FROM  emp WHERE  deptno = 10;

为了评估选择率(或者换句话说计算出最优执行计划),CBO会使用各种形式的统计信息,配置参数等。以表中列的角度来说,CBO会收集以下统计信息:

  • 列中不同值的数量也就是NDV

  • 列中的最小值/最大值

  • 列中null值的数量

  • 数据分布或直方图信息

在没有直方图时,优化器使用基表中记录的列中不同值的数量,列中最小值/最大值和列中null值的数量来计算统计信息。使用这些信息优化器假设数据在列中的最小值和最大值之间是均匀分布的或者说列中每一个不同值的出现次数是相同的。

下面进行举例说明:

创建一个测试表histograms_test它有10000行记录, 表特征如下所示

  • 有两个列

  • uniqueVal包含不同值的范围从1到10000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值