日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
OracleSQL條件順序?qū)π阅艿挠绊懹心男?/div>

此文章主要描述的是Oracle SQL條件的實際順序?qū)ο嚓P(guān)性能的影響。在實際操作中有人會問到關(guān)于Oracle數(shù)據(jù)庫中的Where子句的條件書寫順序的正確與否是否會對SQL性能有影響,我的直覺是沒有影響。

10年的宿城網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整宿城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“宿城網(wǎng)站設(shè)計”,“宿城網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

因為如果這個順序有影響,Oracle應(yīng)該早就能夠做到自動優(yōu)化,但一直沒有關(guān)于這方面的確鑿證據(jù)。在網(wǎng)上查到的文章,一般認(rèn)為在RBO優(yōu)化器模式下無影響(10G開始,缺省為RBO優(yōu)化器模式),而在CBO優(yōu)化器模式下有影響,主要有兩種觀點:

a.能使結(jié)果最少的條件放在最右邊,SQL執(zhí)行是按從右到左進行結(jié)果集的篩選的;

b.有人試驗表明,能使結(jié)果最少的條件放在最左邊,SQL性能更高。

查過oracle8到11G的在線文檔,關(guān)于SQL優(yōu)化相關(guān)章節(jié),沒有任何文檔說過where子句中的條件對SQL性能有影響,到底哪種觀點是對的,沒有一種確切的結(jié)論,只好自己來做實驗證明。結(jié)果表明,我們大家都知道Oracle SQL條件的相關(guān)執(zhí)行是從右到左的,但條件的順序?qū)QL性能沒有影響。

實驗一:證明了SQL的語法分析是從右到左的

下面的試驗在9i和10G都可以得到相同的結(jié)果: 第1條語句執(zhí)行不會出錯,第2條語句會提示除數(shù)不能為零。

 
 
 
  1. Select 'ok' From Dual Where 1 / 0 = 1 And 1 = 2;
  2. Select 'ok' From Dual Where 1 = 2 And 1 / 0 = 1;

證明了SQL的語法分析是從右到左的。

實驗二:證明了SQL條件的執(zhí)行是從右到左的

 
 
 
  1. drop table temp;
  2. create table temp( t1 varchar2(10),t2 varchar2(10));
  3. insert into temp values('zm','abcde');
  4. insert into temp values('sz','1');
  5. insert into temp values('sz','2');
  6. commit;
  7. select * from temp where to_number(t2)>1 and t1='sz';
  8. select * from temp where t1='sz' and to_number(t2)>1;

在9i上執(zhí)行, 第1條語句執(zhí)行不會出錯,第2條語句會提示“無效的數(shù)字”

在10G上執(zhí)行,兩條語句都不會出錯。

說明:9i上,Oracle SQL條件的執(zhí)行確實是從右到左的,但是10G做了什么調(diào)整呢?

實驗三:證明了在10g上SQL條件的執(zhí)行是從右到左的

 
 
 
  1. Create Or Replace Function F1(v_In Varchar2) Return Varchar2 Is
  2. Begin
  3. Dbms_Output.Put_Line('exec F1');
  4. Return v_In;
  5. End F1;
  6. /
  7. Create Or Replace Function F2(v_In Varchar2) Return Varchar2 Is
  8. Begin
  9. Dbms_Output.Put_Line('exec F2');
  10. Return v_In;
  11. End F2;
  12. /
  13. SQL> set serverout on;
  14. SQL> select 1 from dual where f1('1')='1' and f2('1')='1';
  15. 1
  16. 1
  17. exec F2
  18. exec F1
  19. SQL> select 1 from dual where f2('1')='1' and f1('1')='1';
  20. 1
  21. 1
  22. exec F1
  23. exec F2

結(jié)果表明,Oracle SQL條件的執(zhí)行順序是從右到左的。


分享名稱:OracleSQL條件順序?qū)π阅艿挠绊懹心男?
本文鏈接:http://m.5511xx.com/article/cogpicc.html