oracle 基数 选择率,1.1.2.2 可选择率(1)
1.1.2.2 可选择率(1)
可选择率(Selectivity)也是CBO特有的概念,它是指施加指定谓词条件后返回结果集的记录数占未施加任何谓词条件的原始结果集的记录数的比率。
可选择率可以用如下的公式来表示:
从上述计算可选择率的公式可以看出,可选择率的取值范围显然是0~1,它的值越小,就表明可选择性越好。毫无疑问,可选择率为1时的可选择性是最差的。
可选择率和成本值的估算也是息息相关的,因为可选择率的值越大,就意味着返回结果集的Cardinality的值就越大,所以估算出来的成本值也就会越大。
实际上,CBO就是用可选择率来估算对应结果集的Cardinality的,上述关于可选择率的计算公式等价转换后就可以用来估算Cardinality的值。这里我们用"Original Cardinality"来表示未施加任何谓词条件的原始结果集的记录数,用"Computed Cardinality"来表示施加指定谓词条件后返回结果集的记录数,CBO用来估算Cardinality的公式如下:
ComputedCardinality=OriginalCardinality * Selectivity
虽然看起来可选择率的计算公式很简单,但实际上它的具体计算过程还是很复杂的,每一种具体情况都会有不同的计算公式。其中最简单的情况是对目标列做等值查询时可选择率的计算。在目标列上没有直方图且没有NULL值的情况下,用目标列做等值查询的可选择率是用如下公式来计算的:
我们现在再回过头来看1.1.2节中提到的范例SQL 7:
select * from emp
wheremgr=7902;
对于范例SQL 7,我们来看一下CBO会如何计算列MGR的可选择率和该SQL返回结果集的Cardinality。
先把列MGR修改为NOT NULL:
SQL>alter table emp modify (mgr not null);
Table altered
然后在列MGR上创建一个名为IDX_EMP_MGR的单键值B树索引:
SQL>create index idx_emp_mgr on emp(mgr);
Index created
表EMP的记录数现在为13:
SQL>select count(*) from emp;
COUNT(*)
----------
13
列MGR的distinct值的数量也为13:
SQL>select count(distinct mgr) from emp;
COUNT(DISTINCTMGR)
------------------
13
现在使用DBMS_STATS包来对表EMP、表EMP的所有列、表EMP上的所有索引收集一下统计信息(注意,这里没有收集直方图统计信息,关于DBMS_STATS包的用法,我们会在"第5章 Oracle里的统计信息"中详细说明):
SQL>exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'EMP',estimate_percent=>100,cascade=>true,method_opt=>'for all columns size 1',no_invalidate=>false);
PL/SQL procedure successfully completed
接着执行范例SQL 7:
SQL>set linesize 800
SQL>set pagesize 900
SQL>set autotrace traceonly
SQL>select * from emp wheremgr=7902;
【责任编辑:book TEL:(010)68476606】
点赞 0
oracle 基数 选择率,1.1.2.2 可选择率(1)相关推荐
- Oracle多列统计信息
Oracle多列统计信息 通常,当我们将SQL语句提交给Oracle数据库时,Oracle会选择一种最优方式来执行,这是通过查询优化器Query Optimizer来实现的.CBO(Cost-Base ...
- oracle resp_cpu含义,【原创】ORACLE 深入解析10053事件
[原创]ORACLE 深入解析10053事件 发布时间:2020-08-09 16:47:25 来源:ITPUB博客 阅读:95 作者:kunlunzhiying 新年新说: 新年伊始,2012年过去 ...
- MSQL优化基础(frequence直方图选择率)
准备数据 drop table t1; create table t1(n1 number); beginfor i in 1..100 loopfor j in i*5..100 loopinser ...
- 【性能优化】 之 10053 事件
1.验证全表扫描的成本计算公式,贴出执行计划和计算公式.<br> 2.给出B-tree索引 Unique scan的成本计算公式,贴出执行计划和计算公式.<br> 3.通过10 ...
- 10053 事件详解
以下内容完全拷贝于ITPUT大牛,为方便查找,做下记录. 原文链接:http://www.itpub.net/thread-1766504-1-1.html 由于帖子较长顾分为2段:第一段 < ...
- 支付宝工程师如何搞定关系数据库的“大脑”——查询优化器
前言 查询优化器是关系数据库系统的核心模块,是数据库内核开发的重点和难点,也是衡量整个数据库系统成熟度的"试金石". 查询优化理论诞生距今已有四十来年,学术界和工业界其实已经形成了 ...
- 【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(4)
前文回顾: 如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(1) 如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(2) 如何掌握openGauss数据库核心技术?秘 ...
- 十八般武艺玩转GaussDB(DWS)性能调优:路径干预
摘要:路径生成是表关联方式确定的主要阶段,本文介绍了几个影响路径生成的要素:cost_param, scan方式,join方式,stream方式,并从原理上分析如何干预路径的生成. 一.cost模型选 ...
- MOOC-浙江大学-博弈论基础-学习笔记(三)
第二讲 基本假设 from:蒋文华 基本假设是博弈论的理论基础 第一节 理性假设 一.认知理性 1.人是自我利益的判断者 清楚的知道想要什么,更想要什么. 具有偏好的完备性, 具有偏好的传递性, 中庸 ...
- [论文笔记]使用GPU处理数据仓库查询之“阴”和“阳”
The Yin and Yang of Processing Data Warehousing Queries on GPU Devices 研究背景 在数据库领域,使用GPU进行查询加速已经被人 ...
最新文章
- OpenCV函数学习之cvLUT
- 【PAT乙级题库】全套总结
- 一起来学习android自定义控件3——边缘凹凸的View
- [Java基础]反射练习之越过泛型检查,运行配置文件制定内容
- jackson 读取多文件_Spring Boot系列之读取配置
- .NET简谈插件系统开发模式
- Linux审计sudo
- NTFS For Mac的兼容性问题
- cssrem转换工具_微信小程序开发-rem转换rpx小工具
- Linux之vim详解
- 微信公众号H5游戏平台完整源码放送给大家
- 目标跟踪之ADMM求解简介
- BGP 路由聚合(Huawei设备)
- Keil的AC6与AC5中文手册
- Nat Nanotechnol | 朱涛/陈春英等合作发现碳纳米管呼吸暴露后的延迟毒性导致小鼠原位乳腺肿瘤的多发性广泛转移...
- 【数字IC验证快速入门】14、SystemVerilog学习之基本语法1(数组、队列、结构体、枚举、字符串...内含实践练习)
- LeetCode 176 第二高的薪水
- [MySQL免安装版本] 下载、配置、启动、密码修改
- 学计算机的自述,计算机的自述作文范文
- NVIDIA Tesla® K80 加速 数字全息实时重建
热门文章
- Atitit 提升可读性的艺术 目录 1. 几大原则	2 1.1. 直接原则,无脑原则。。。	2 2. 本地化命名法	2 2.1. 可以使用管理命名法 多个api 比如old api,new ap
- Atitit 封装的艺术 目录 1.1. 规范是不暴露特有的api	1 1.2. 方便理解,提升可读性	1 1.3. Atitit 提升可读性 数据结构特殊化专用api 比较通用的对象
- Atitti.java android反编译解决方案-----虚拟机方案
- atitit.ajax bp dwr 3.的注解方式配置使用流程总结 VO9o.....
- 基煜基金王翔:助力金融机构提升效率 强化内控合规
- 亚马逊:贝佐斯没有闹钟
- 高费率基金是投资者的毒药
- (转)以太坊的 Merkle 树
- 阿里云磐久服务器M系列研发之路
- 阿里云张献涛:如何修炼云计算的弹指神通