【Oracle】单表的选择率

简介:
  本文只是记录《基于成本的oracle 优化法则》的简单的笔记(因为要重新搭建RAC 把之前的环境删掉了,oracle 环境还没建好,现在先纸上谈兵一下  )
优化器并没有智能--只是一个软件!
1 对含有空值的字段 
基本选择率=1/num_distinct
num_nulls=120
num_rows=1200
选择率=基本选择率*(num_rows-num_nulls)/num_rows=1/12*((1200-120)/1200)=0.075
调整后的基数=1200*0.075=90
2 对于in-list
比如: 
select count(1) from aud where month_no in (6,7,8);
 oracle 会在解析sql的时候将in list转换为or 的形式 :month_no=6 or month_no=7 or month_no=8 
 选择率类似联合概率:
 P(A OR B ORC)=P(A)+ P(B)+P(C)-P(A AND B)-P(A AND C)-P(C AND B)+P(A AND B AND C)
 3/12-3/144+1/1728=0.22975 
 基数=1200*0.22975=275.69
3 对于区间谓词
  month_no > 8
  选择率=(high_value-limit)/(high_value-low_value)=(12-8)/(12-1)=4/11
  month_no >=8
  选择率=(high_value-limit)/(high_value-low_value)+1/num_distinct =(12-8)/(12-1)+1/12=4/11+1/12
  month_no <8  
选择率=(limit-low_value)/(high_value-low_value)=(8-1)/(12-1)=7/11 
  month_no <=8  
选择率=(limit-low_value)/(high_value-low_value)+1/num_distinct=(8-1)/(12-1)+1/12=7/11+1/12   
month_no between 6 and 9  month_no>=6 and month_no<=9  
选择率=(hight_limit-low_limit)/(high_value-low_value)+1/num_distinct+1/num_distinct=(9-6)/(12-1)+1/12+1/12
  month_no>=6 and month_no<9
  选择率 =(9-6)/(12-1)+1/12  
month_no>6 and month_no<=9
  选择率 =(9-6)/(12-1)+1/12  
month_no>6 and month_no<9
  选择率 =(9-6)/(12-1)
4 双谓词
month_no>=8 or month_no<8 
这个选择条件 表明 oracle 的用化器并没有把 谓词看成整体而是独立的谓词。其选择率为
 P(A OR B)=P(A)+ P(B)-P(A AND B)
而对于 and   和 not 条件的选择率的计算方法如下: 
P(A AND B)=P(A)* P(B)
 NOT P(A)=1-P(A)
 oracle 在解析执行计划的时候,将各个谓词视为独立的谓词,当一个表使用多个谓词时,必须确保各个谓词之间没有必然联系,否则cbo 将得不到准确的执行计划
相关文章
|
缓存 Oracle 关系型数据库
Oracle中的触发器与序列:自增列的魔法组合
【4月更文挑战第19天】Oracle数据库中,通过触发器和序列的组合可实现自增列功能。序列充当自动计数器,提供递增数值,而触发器则在插入新记录时自动分配序列值。创建序列如`CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1 NOCACHE`,然后创建触发器`TRIGGER trg_employees_before_insert`在`BEFORE INSERT`时将序列的下一个值赋予`employee_id`。这种方式使得在插入记录时无需手动设置ID,提高了效率。但使用时需注意序列状态、并发性和性能优化。
|
存储 NoSQL Redis
【DRF】django restframework如何使用redis来做token认证
【DRF】django restframework如何使用redis来做token认证
510 0
【DRF】django restframework如何使用redis来做token认证
|
监控 网络协议 Linux
linux 淘宝开源监控工具tsar
Linux系统性能监控工具:tsar 安装、配置、以及使用 介绍 tsar 是淘宝自己开发的一个监控工具,可用于收集和汇总系统信息,例如CPU,负载,IO和应用程序信息,例如nginx,HAProxy,Squid等。
2697 2
|
存储
DARTS v.s. RTSAD
DARTS方法 (比较流行)DARTS(Design Approach for Real-Time System)方法强调了把实时系统分解为并发的任务,并为定义这些任务之间的接口。这个方法起源于实时系统的顺序结构化开发方法。顺序结构化开发方法在分析阶段使用RTSA方法,设计阶段使用TRSD方法,但是这个方法没有考虑实时系统是由一些并发任务组成的这个特点。针对实时系统的这个特点,DARTS方法提
2136 0
|
2天前
|
人工智能 运维 安全
|
4天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
381 124
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
7天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
657 107