自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle SQL條件順序?qū)π阅艿挠绊懹心男?/h1>

數(shù)據(jù)庫 Oracle
以下的文章講述的是Oracle SQL條件的順序?qū)ζ湫阅艿挠绊懀约癘racle SQL條件的正確運行模式的介紹,以下就是文章的具體內(nèi)容分析。

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

因為如果這個順序有影響,Oracle應(yīng)該早就能夠做到自動優(yōu)化,但一直沒有關(guān)于這方面的確鑿證據(jù)。在網(wǎng)上查到的文章,一般認為在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í)行順序是從右到左的。

【編輯推薦】

  1. 對Oracle歸檔模式的切換技術(shù)理解
  2. 對Oracle Raw類型的詳細解剖
  3. Oracle數(shù)據(jù)集成的解決方案詳解
  4. Oracle 10g應(yīng)用比例不斷攀升的緣由
  5. Oracle數(shù)據(jù)庫性能的幾大優(yōu)點介紹
責任編輯:佚名 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-04-22 10:01:44

Oracle收購SUN

2009-06-30 15:02:41

磁盤排序Oracle數(shù)據(jù)庫性能

2011-05-25 14:42:37

Oracle空間管理系統(tǒng)性能

2023-06-16 14:31:44

2013-12-02 09:09:12

網(wǎng)絡(luò)性能管理員網(wǎng)管

2010-04-19 17:09:30

Oracle sql

2022-11-17 08:00:18

JavaScript錯誤性能

2022-12-15 08:00:38

JavaScript錯誤性能

2010-05-10 09:48:16

SQL Server數(shù)

2010-10-26 17:17:37

創(chuàng)建ORACLE索引

2010-10-21 11:10:57

SQL Server查

2014-03-25 10:26:55

2020-04-01 16:32:55

SQL數(shù)據(jù)庫MySQL

2023-08-11 09:54:18

2012-05-07 08:18:42

程序日志性能

2010-04-20 17:07:46

Oracle 性能

2010-05-04 18:14:50

Oracle 性能工具

2010-07-16 13:48:08

SQL Server合

2020-07-14 13:54:30

內(nèi)存時序性能

2018-03-07 06:30:17

點贊
收藏

51CTO技術(shù)棧公眾號