日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[20170420]表达式加0或者减0不一样.txt

發(fā)布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [20170420]表达式加0或者减0不一样.txt 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

[20170420]表達(dá)式加0或者減0不一樣.txt

--//oracle 有時候避免某個索引采用字段+0或者-0的方式,不使用索引,但是兩者存在一點點區(qū)別,通過例子說明。

1.環(huán)境:
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上,執(zhí)行計劃選擇全表掃描,但是你如果仔細(xì)看E-Rows就可以看出幾種的區(qū)別。

id2=100??? E-Rows 50
id2+0=100? E-Rows 50
id2-0=100? E-Rows 4000

--//很明顯oracle在分析生成執(zhí)行計劃上+0,-0是區(qū)別對待的,采用+0方式,oracle視乎知道執(zhí)行者選擇繞過索引(當(dāng)然我沒建立),估算E-Rows的統(tǒng)計信息是正確的。
--//而采用-0方式,oracle把這樣的表達(dá)式當(dāng)作函數(shù)對待,按照1%取E_rows ,400000*0.01=4000。
--//知道這個沒什么意思,只是提醒自己要注意一些細(xì)節(jié)。

總結(jié)

以上是生活随笔為你收集整理的[20170420]表达式加0或者减0不一样.txt的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。