Oracle中nvl()與decode()兩個函數哪個效能更好

來源:互聯網
上載者:User

1.建立一個測試表test,並插入一條資料
SQL> create table test(id int);
Table created.
SQL> insert into test values(1);
1 row created.
SQL> commit;
Commit complete.

2.建立一個函數,用來延時,調到到這個函數會在這裡迴圈50000000次,會有待等
SQL> create or replace function sleep_now return number is
 2   a number;
 3    begin
 4     a:=0;
 5      while a<50000000
 6      loop
 7        a :=a+1;
 8       end loop;
 9      return a;
10     end;
11  /
Function created.

3.開啟sqlplus的計時器
SQL> set timing on

4.用nvl()函數測試表test中的id列的值是否為空白
SQL> select nvl(id,sleep_now()) from test;
NVL(ID,SLEEP_NOW())
-------------------
                 1
Elapsed: 00:00:03.25
查表test中就一條資料花了3秒多才讀完,說明什麼問題呢,思考一下?
好,那我直接給個固定的值:比如10,放到nvl中執行,看是不是馬上就會執行完畢?
SQL> select nvl(10,sleep_now()) from test;
NVL(10,SLEEP_NOW())
-------------------
                10
Elapsed: 00:00:03.33
還是一樣查一條資料要花3秒多,說明用nvl()函數,即使這個值非空,這個函數還是會去讀後面的sleep_now()函數,這樣就會消耗時間了。

5.用decode()來測試同樣的一條資料,看查詢的時間
SQL>  select decode(id,null,sleep_now(),1) from test;
DECODE(ID,NULL,SLEEP_NOW(),1)
-----------------------------
                           1
Elapsed: 00:00:00.01

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

馬上查出,幾乎沒花時間,很快哦!
同樣再測一下固定值:比如10
SQL> select decode(id,10,sleep_now(),1) from test;
DECODE(ID,10,SLEEP_NOW(),1)
---------------------------
                         1
Elapsed: 00:00:00.01
同樣也是馬上查出
這麼快查出,說明一當decode()函數查到值就不會去讀後面的sleep_now()函數。

6.從第4步與第5步比較,同樣的操作,明顯 decode函數效能更佳。

7.最後再來個decode的例子,如何用好decode()
truncate table test;
begin
for i in 1 ..10000 loop
 insert into test values(4);
 commit;
end loop;
end;
/
SQL> select id,count(*) from test group by id;
       ID   COUNT(*)
---------- ----------
        4      10000
表test中有10000條記錄, id值全是4,思考下面A、B兩個sql語句,相對來說哪個效能更好一些?
A   select decode(id,1,'A',2,'B',3,'C',4,'D') from test;
B   select decode(id,4,'D',2,'B',3,'C',1,'A') from test;
知道的解釋下!!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.