[20170420]表达式加0或者减0不一样.txt
[20170420]表达式加0或者减0不一样.txt
--//oracle 有时候避免某个索引采用字段+0或者-0的方式,不使用索引,但是两者存在一点点区别,通过例子说明。
1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@book> create table t as select rownum id1,round(rownum/50,0) id2,lpad('x',100,'x') name from dual connect by level <=4e5;
Table created.
execute sys.dbms_stats.gather_table_stats ( OwnName => user),TabName => 't',Estimate_Percent => NULL,Method_Opt => 'FOR ALL COLUMNS SIZE 1 ',Cascade => True ,No_Invalidate => false)
2.测试:
SCOTT@book> select count(*) from t where id2=100;
COUNT(*)
----------
50
Plan hash value: 2966233522
------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | Reads |
------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 1782 (100)| | 1 |00:00:00.04 | 6449 | 6446 |
| 1 | SORT AGGREGATE | | 1 | 1 | 4 | | | 1 |00:00:00.04 | 6449 | 6446 |
|* 2 | TABLE ACCESS FULL| T | 1 | 50 | 200 | 1782 (1)| 00:00:22 | 50 |00:00:00.04 | 6449 | 6446 |
------------------------------------------------------------------------------------------------------------------------------
SCOTT@book> select count(*) from t where id2+0=100;
COUNT(*)
----------
50
Plan hash value: 2966233522
------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | Reads |
------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 1782 (100)| | 1 |00:00:00.07 | 6449 | 6446 |
| 1 | SORT AGGREGATE | | 1 | 1 | 4 | | | 1 |00:00:00.07 | 6449 | 6446 |
|* 2 | TABLE ACCESS FULL| T | 1 | 50 | 200 | 1782 (1)| 00:00:22 | 50 |00:00:00.07 | 6449 | 6446 |
------------------------------------------------------------------------------------------------------------------------------
SCOTT@book> select count(*) from t where id2-0=100;
COUNT(*)
----------
50
Plan hash value: 2966233522
------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | Reads |
------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 1782 (100)| | 1 |00:00:00.08 | 6449 | 6446 |
| 1 | SORT AGGREGATE | | 1 | 1 | 4 | | | 1 |00:00:00.08 | 6449 | 6446 |
|* 2 | TABLE ACCESS FULL| T | 1 | 4000 | 16000 | 1782 (1)| 00:00:22 | 50 |00:00:00.08 | 6449 | 6446 |
------------------------------------------------------------------------------------------------------------------------------
3.分析我这里没有建立索引在字段ID2上,执行计划选择全表扫描,但是你如果仔细看E-Rows就可以看出几种的区别。
id2=100 E-Rows 50
id2+0=100 E-Rows 50
id2-0=100 E-Rows 4000
--//很明显oracle在分析生成执行计划上+0,-0是区别对待的,采用+0方式,oracle视乎知道执行者选择绕过索引(当然我没建立),估算E-Rows的统计信息是正确的。
--//而采用-0方式,oracle把这样的表达式当作函数对待,按照1%取E_rows ,400000*0.01=4000。
--//知道这个没什么意思,只是提醒自己要注意一些细节。
[20170420]表达式加0或者减0不一样.txt相关推荐
- 多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)
在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了.配合Object的wait().notify()系列方法可以实现等待/通知模式.Condition接口 ...
- 为什么 HashMap 加载因子一定是0.75?而不是0.8,0.6?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的 ...
- keras/tensorflow 模型保存后重新加载准确率为0 model.save and load giving different result
我在用别人的代码跑程序的时候遇到了这个问题: keras 模型保存后重新加载准确率为0 GitHub上有个issue:model.save and load giving different resu ...
- android7.0如何加载本地图片,Android 6.0和7.0 加载同一张图片,结果不同
问题描述 Android6.0和7.0 加载一张jpg图片,转换为bitmap, 然后将其保存到本地,用UE比较两张本地图片的2进制,得到的结果不一致. 问题出现的环境背景及自己尝试过哪些方法 (1) ...
- 为什么 HashMap 的加载因子是0.75?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://blog.csdn.net/N ...
- [转]为什么Java中的HashMap默认加载因子是0.75
前几天在一个群里看到有人讨论hashmap中的加载因子为什么是默认0.75. HashMap源码中的加载因子 static final float DEFAULT_LOAD_FACTOR = 0.75 ...
- eui加载时间长_面试官:为什么 HashMap 的加载因子是0.75?
有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的时候发现有很多可以去细究的问题,最终是会回归于数学的,如HashMap的加载因子为什么是0.75? 本文主要对以下内容进行介绍: 为什 ...
- 面试官:为什么 HashMap 的加载因子是0.75?
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 来源:8rr.co/8V9Q 有很多东西之前在学的时候没怎么注意, ...
- element 往node里面增加属性值_HashMap加载因子为何0.75,为何初始化值2的指数幂,底层解析...
01 前言 我们在声名HashMap的时候,一般都会这样写. public class MapTest { public static void main(String[] args) { HashM ...
最新文章
- mac终端Iterm2支持rz和sz的解决方案
- C++ int与string的转化
- js动态创建对象_JS深浅拷贝的深入浅出
- 第9步 spring 配置 springmvc配置
- 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)
- 知乎热榜:如何看待华为天才少年年薪201万?
- 2.4 残差网络为什么有用?
- 一起来学习.net core程序使用中介者模式:MediatR插件
- Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
- 任务调度在分布式部署环境下保证task的正确运行
- Python出租车GPS数据处理(TransBigData)
- 计算机网络 自顶向下方法 第四章 网络层
- 计算机教室联成的网络,多媒体网络教室的功能
- RGB颜色值与十六进制颜色码转换工具
- Windows10 pycharm 前进后退快捷键配置
- 3. 布莱叶盲文与二进制码
- JavaEE项目实战_流程审批之二
- I2S总线学习:I2S数据格式
- main函数中的argc和argv是什么意思?
- 软构习题课一内容总结
热门文章
- GPU Pro2 - 3.Procedural Content Generation on the GPU
- 服务器自动挂载硬盘,Linux硬盘分区及开机自动挂载
- java 基础安装和Tomcat8配置
- @Component 和 @Bean 的区别
- 多数公司容易犯的5个大数据错误
- redis集群的搭建
- 配置云服务器 FTP 服务
- Swift数据类型_整型和浮点型
- 关于Hyper-V备份的四大注意事项
- HDU ACM 1181 变形课 (广搜BFS + 动态数组vector)-------第一次使用动态数组vector