[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。
--//知道这个没什么意思,只是提醒自己要注意一些细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAPLAP开发环境中release模式和debug模式烧写.hex文件的不同之处

昨天看了齐工的报告才知道release模式和debug模式烧写.hex文件的不同。 三&#xff1a;问题分析 1. PIC系列的仿真器和集成开发环境的情况&#xff1a; Release模式和Debug模式是有区别的&#xff1b;Release模式是只把代码烧录到单片机的flash区内&#xff0c;上电执行&am…

JavaWeb -- Session实例 -- 自动登录 和 防止表单重复提交(令牌产生器) MD5码

1、 自动登录 http://blog.csdn.net/xj626852095/article/details/16825659 2. 防止表单重复提交 表单Servlet //负责产生表单 public class FormServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletEx…

电脑常见故障处理_彩超常见故障及维修

彩超是医学检测手段中重要的环节之一&#xff0c;是对产妇以及对病人进行内部组织和结构观察的重要方式之一&#xff0c;彩超应用得当可以及早的诊断出病人的疾病&#xff0c;为患者解除疾病的困扰。彩超设备是一种极为先进的诊断系统&#xff0c;一般彩超系统包括以下几个部分…

微软历史最高市值是多少?

有人说微软在1999 年 12 月达到股价历史最高点 $58.38并不准确。我1999年12月22日增加微软&#xff0c;公司依照1999年12月27日的价格&#xff08;119.125&#xff0c;拆股后变为59.5625&#xff09;给了我一笔期权&#xff0c;这个价格&#xff0c;成为微软股价空前绝后最高点…

京东2016校招编程题

记得有一个大题&#xff0c;说的是给定一个n*n的矩阵&#xff0c;要求从1开始填充矩阵&#xff0c;最后的矩阵是蛇形的。即如下&#xff1a; n3, 7 8 1 6 9 2 5 4 3 n4, 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 给出代码&#xff1a; #incl…

leetcode21

/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) { val x; }* }*/ public class Solution {public ListNode MergeTwoLists(ListNode l1, ListNode l2) {//递归实现链表合并…

springmvc02

1&#xff0c;创建实体类对象User 注意要导入 bean-validator.jar 包 package com.yangw.springmvc.entity;import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; im…

用基本信号画出如下的信号_股市入门基本知识丨下跌时期可以抄底的安全信号有哪些...

点击蓝色字体 关注我们 带来更多精彩股票市场中的秘籍其实就是“低买高卖”&#xff0c;不过我们不能在大盘一开始下跌的时候就进行买入&#xff0c;因为不清楚下跌的时间&#xff0c;太早介入&#xff0c;只有在反弹幅度超出我们介入的点的时候才可以进行高卖。那么什么时候才…

Flume数据传输事务分析[转]

本文基于ThriftSource,MemoryChannel,HdfsSink三个组件&#xff0c;对Flume数据传输的事务进行分析&#xff0c;如果使用的是其他组件&#xff0c;Flume事务具体的处理方式将会不同。一般情况下&#xff0c;用MemoryChannel就好了&#xff0c;我们公司用的就是这个&#xff0c;…

最近的一些校招试题摘录

最近又参加了一些校招&#xff0c;真是马不停蹄啊。多参加考试是好的&#xff0c;可以不断发现一些新的问题。下面摘录一些我不太会的题。 1.volatile的作用是什么&#xff1f; 答案&#xff1a;volatile是类型修饰符&#xff0c;用它修饰的类型变量可能会被编译器未知的因素…

yii2中的rules验证规则

2019独角兽企业重金招聘Python工程师标准>>> Rules验证规则&#xff1a;required : 必须值验证属性||CRequiredValidator 的别名, 确保了特性不为空.[[字段名],required,requiredValue>必填值,message>提示信息];email : 邮箱验证||CEmailValidator 的别名,确…

weblogic数据源配置的问题,weblogic密码破解

weblogic 报错 please increase XXX,得知是连接池出了问题&#xff0c;查看weblogic配置&#xff0c;发现没有设置超时 查看oracle 当前session&#xff0c;可以看到连接的机器&#xff0c;用户&#xff0c;当前执行的sqlid select * from v$session; select v$sql where sql_i…

自己写的简易多任务系统---基于pic18fxxx

这个工程只是实现了最简单的OS任务调度&#xff0c;对于理解任务调度有点帮助。其实就是从UC/OS-II里面摘出来的&#xff0c;没有原来的那么复杂&#xff0c;很精简&#xff0c;但道理上是一样的。工程中的CPU.C文件时直接拿Nathan Brown写好的&#xff0c;因为关于PIC任务切换…

python语言整数类型-Python 的内置数值类型

Python 是一种敏捷的、动态类型化的、极富表现力的开源编程语言&#xff0c;可以被自由地安装到多种平台上。Python 代码是被解释的。如果您对编辑、构建和执行循环较为熟悉&#xff0c;则 Python 代码对您来说更简单。但是&#xff0c;请不要搞错&#xff1a;Python 器可以是简…

滴滴出行2016校招编程题

1. 给定一个m*n的数组&#xff08;m,n>2,数组值>0&#xff09;&#xff0c;要求选出和最大的子2*2数组。例如&#xff1a; 1 2 3 4 5 6 7 8 9 显然和最大的2*2子数组是5 6;8 9.下面完成这个功能。 Input: &#xff08;m*n的数组&#xff09; 1 2 3 ; 4 5 6 ; 7 8 9 …

每天一个linux命令(22):find 命令的参数详解

find一些常用参数的一些常用实例和一些具体用法和注意事项。 1&#xff0e;使用name选项&#xff1a; 文件名选项是find命令最常用的选项&#xff0c;要么单独使用该选项&#xff0c;要么和其他选项一起使用。 可以使用某种文件名模式来匹配文件&#xff0c;记住要用引号将文件…

(WPF) DataGrid之绑定

通过ObservableCollection 绑定到 DataGrid. 1. 前台Xaml. <DataGrid x:Name"dgMeasurements"HorizontalAlignment"Left"Margin"10,69,0,10"ItemsSource"{Binding}"AutoGenerateColumns"False"Width"370">…

程序=数据结构+算法

这句名言&#xff0c;我现在品来很有感觉&#xff0c;看看uc/os-II里面那些就绪表、查找最高优先级任务等等&#xff0c;算法设计的非常巧妙&#xff0c;整个OS都是围绕着OS_TCB来运转的&#xff0c;任务需要通信&#xff0c;那就在建立个OS_EVENT&#xff0c;通过.*OSTCBEvent…

去哪笔试两题

1&#xff0c;a是一个有序数组&#xff0c;但经过向右移动数位&#xff0c;现在预在a中查找元素key的位置&#xff0c;如不存在&#xff0c;返回0。例如a[5,6.7.8,1,2,3,4]. 实现&#xff1a; 1 #quna12 def findPos(a,key):3 mina[0];4 for i in range(len(a)):5 …

MySQL5.6主从复制搭建基于日志(binlog)

什么是MySQL主从复制 简单来说&#xff0c;就是保证主SQL&#xff08;Master&#xff09;和从SQL&#xff08;Slave&#xff09;的数据是一致性的&#xff0c;向Master插入数据后&#xff0c;Slave会自动从Master把修改的数据同步过来&#xff08;有一定的延迟&#xff09;&…