[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相关推荐

  1. 多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)

    在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了.配合Object的wait().notify()系列方法可以实现等待/通知模式.Condition接口 ...

  2. 为什么 HashMap 加载因子一定是0.75?而不是0.8,0.6?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的 ...

  3. keras/tensorflow 模型保存后重新加载准确率为0 model.save and load giving different result

    我在用别人的代码跑程序的时候遇到了这个问题: keras 模型保存后重新加载准确率为0 GitHub上有个issue:model.save and load giving different resu ...

  4. android7.0如何加载本地图片,Android 6.0和7.0 加载同一张图片,结果不同

    问题描述 Android6.0和7.0 加载一张jpg图片,转换为bitmap, 然后将其保存到本地,用UE比较两张本地图片的2进制,得到的结果不一致. 问题出现的环境背景及自己尝试过哪些方法 (1) ...

  5. 为什么 HashMap 的加载因子是0.75?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://blog.csdn.net/N ...

  6. [转]为什么Java中的HashMap默认加载因子是0.75

    前几天在一个群里看到有人讨论hashmap中的加载因子为什么是默认0.75. HashMap源码中的加载因子 static final float DEFAULT_LOAD_FACTOR = 0.75 ...

  7. eui加载时间长_面试官:为什么 HashMap 的加载因子是0.75?

    有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的时候发现有很多可以去细究的问题,最终是会回归于数学的,如HashMap的加载因子为什么是0.75? 本文主要对以下内容进行介绍: 为什 ...

  8. 面试官:为什么 HashMap 的加载因子是0.75?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 来源:8rr.co/8V9Q 有很多东西之前在学的时候没怎么注意, ...

  9. element 往node里面增加属性值_HashMap加载因子为何0.75,为何初始化值2的指数幂,底层解析...

    01 前言 我们在声名HashMap的时候,一般都会这样写. public class MapTest { public static void main(String[] args) { HashM ...

最新文章

  1. mac终端Iterm2支持rz和sz的解决方案
  2. C++ int与string的转化
  3. js动态创建对象_JS深浅拷贝的深入浅出
  4. 第9步 spring 配置 springmvc配置
  5. 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)
  6. 知乎热榜:如何看待华为天才少年年薪201万?
  7. 2.4 残差网络为什么有用?
  8. 一起来学习.net core程序使用中介者模式:MediatR插件
  9. Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
  10. 任务调度在分布式部署环境下保证task的正确运行
  11. Python出租车GPS数据处理(TransBigData)
  12. 计算机网络 自顶向下方法 第四章 网络层
  13. 计算机教室联成的网络,多媒体网络教室的功能
  14. RGB颜色值与十六进制颜色码转换工具
  15. Windows10 pycharm 前进后退快捷键配置
  16. 3. 布莱叶盲文与二进制码
  17. JavaEE项目实战_流程审批之二
  18. I2S总线学习:I2S数据格式
  19. main函数中的argc和argv是什么意思?
  20. 软构习题课一内容总结

热门文章

  1. GPU Pro2 - 3.Procedural Content Generation on the GPU
  2. 服务器自动挂载硬盘,Linux硬盘分区及开机自动挂载
  3. java 基础安装和Tomcat8配置
  4. @Component 和 @Bean 的区别
  5. 多数公司容易犯的5个大数据错误
  6. redis集群的搭建
  7. 配置云服务器 FTP 服务
  8. Swift数据类型_整型和浮点型
  9. 关于Hyper-V备份的四大注意事项
  10. HDU ACM 1181 变形课 (广搜BFS + 动态数组vector)-------第一次使用动态数组vector