[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.pswp.cn/news/259143.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259143.shtml
英文地址,請注明出處:http://en.pswp.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;&…