Oracle中利用DETERMINISTIC聲明提高效能(二) 參數順序對效能的影響

來源:互聯網
上載者:User

雖然Oracle提供的DETERMINISTIC聲明,本意是確保函數的確定性,但是如何合理利用,是可以用來提高效能的。

這一篇描述參數順序對效能的影響。

上一篇文章提到了,如果希望通過DETERMINISTIC來擷取效能收益,那麼採用批量方式是必須的,而且數組的值相對而言越大對於效能的協助會越大。

但是這裡存在一個問題,如果需要處理的資料量本身很大,雖然重複的輸入參數不少,但是總的參數不同的值更多,那麼即使將ARRAY的值設定到1000,能帶來的效能收益也很有限,因為即使1000次調用,也不能保證參數完全一樣出現多次,而如果無限制的增大ARRAY,雖然從DETERMINISTIC函數的角度講可以提高效能,但是對於記憶體的佔用等其他方面,會帶來效能的下降,顯然一味的擴大批量並不是問題的解決之道。

其實解決這個問題很簡單,就是在調用DETERMINISTIC函數之前,對函數的參數進行排序,確保相同的參數順序調用,這樣DETERMINISTIC函數執行的次數最少。

繼續使用上一篇文章的例子,看看排序後DETERMINISTIC函數的調用次數:

SQL> UPDATE T_DETER SET C = 1;

已更新15行。

經過時間: 00: 00: 00.17

SQL> SELECT ID, F_DETER(C), F_SYSDATE FROM T_DETER;

ID F_DETER(C) F_SYSDATE

---------- ---------- -------------------

1         1 2011-05-26 14:26:12

2         1 2011-05-26 14:26:13

3         1 2011-05-26 14:26:13

4         1 2011-05-26 14:26:13

5         1 2011-05-26 14:26:13

6         1 2011-05-26 14:26:13

7         1 2011-05-26 14:26:13

8         1 2011-05-26 14:26:13

9         1 2011-05-26 14:26:13

10         1 2011-05-26 14:26:13

11         1 2011-05-26 14:26:13

12         1 2011-05-26 14:26:13

13         1 2011-05-26 14:26:13

14         1 2011-05-26 14:26:13

15         1 2011-05-26 14:26:13

已選擇15行。

1

1

經過時間: 00: 00: 02.29

SQL> SELECT ID, F_DETER(C), F_SYSDATE FROM (SELECT * FROM T_DETER ORDER BY C);

ID F_DETER(C) F_SYSDATE

---------- ---------- -------------------

1         1 2011-05-26 14:26:35

15         1 2011-05-26 14:26:35

3         1 2011-05-26 14:26:35

4         1 2011-05-26 14:26:35

5         1 2011-05-26 14:26:35

6         1 2011-05-26 14:26:35

7         1 2011-05-26 14:26:35

8         1 2011-05-26 14:26:35

9         1 2011-05-26 14:26:35

10         1 2011-05-26 14:26:35

11         1 2011-05-26 14:26:35

12         1 2011-05-26 14:26:35

13         1 2011-05-26 14:26:35

14         1 2011-05-26 14:26:35

2         1 2011-05-26 14:26:35

已選擇15行。

1

經過時間: 00: 00: 01.10

可以看到,由於執行了排序,DETERMINISTIC函數不用再次檢查輸入參數是否相等,因此在SQL運行期間只調用了一次:

SQL> SHOW ARRAY

arraysize 15

SQL> SET ARRAY 1

SQL> SELECT ID, F_DETER(C), F_SYSDATE FROM (SELECT * FROM T_DETER ORDER BY C);

ID F_DETER(C) F_SYSDATE

返回欄目頁:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.