預存程序與SQL語句的一個故事

來源:互聯網
上載者:User
預存程序|語句
    我的一位朋友說:他從台灣知名技術作家李維先生的一本書中獲悉,如果用預存程序封裝SQL語句,系統效率將有極大提升。    他做過實驗!!! --我相信朋友做過實驗,儘管非親眼所見。不過我估計他的實驗有問題,那樣的實驗不但蒙蔽了他,也蒙蔽了李維先生(如果他的著作中的內容沒有被誤會),甚至更多的人。    然而我必須拿出證據,方能使人信服。    後來遇到一個具體的問題:用戶端經常要向資料庫插入記錄。在J2EE中,一個 Entity Bean Home 的 create 方法調用中,一般就沒用預存程序。朋友立馬在觀點上持反對意見( 可能是因為他暫時有來得及否決J2EE ),認為要是J2EE能夠將“插入記錄”諸如此類動作改為對預存程序的調用就好了。    我們因此再次發生爭論(我僅是反對朋友的看法,但也沒提出任何我自己的看法,因為要下一個結論是很不容易的)。最後我不得已而做了實驗,分別在 Oracle 10g 和 postgreSQL 8.0.1 上。實驗內容如下:

A、建表指令碼:create table ztest( fieldA integer primary key, fieldB varchar(128), fieldC varchar(128) )

B、用戶端請求 DBMS 執行的 insert SQL語句:insert into ztest values( ?1, ?2, ?3 ); -- ?1,?2,?3 將在運行時以合理的值替代之

C、用戶端調用的預存程序(JDBC CallableStatement 調用):Oracle:(調用方式 call up_add(...),)create or replace procedure up_add( fieldA integer, fieldB varchar, fieldC varchar ) isbegin    insert into ztest values( fieldA, fieldB, fieldC);end;

postgreSQL:(用戶端調用方式 select uf_add(...) )CREATE OR REPLACE FUNCTION uf_add (integer, varchar, varchar) RETURNS void AS'begin    insert into ztest values($1,$2,$3);    return;end;'LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;

D、環境:postgreSQL:資料庫伺服器與用戶端程式“都在本機”並“同時運行”Oracle: 獨立資料庫伺服器(測試時始終有人在慢慢打字,應該對機器效能無影響)

測試:通過不同方式( 即 請求DBMS執行SQL語句 和 調用DBMS邏輯等價的預存程序)向測試表中連續加入 1024 記錄

經多次反覆測試,得結果如下postgreSQL: 兩種方式下,測試時間均為 21- 24 seconds 之間 (每個結果的測試環境一致)

Oracle: 8次 SQL 執行請求分別用時(ms) 5422 4750 3875 3812 5672 3531 3484 3547              6次 預存程序調用分別用時(ms) 4578 4500 6297 4219 4547 5734(每個結果的測試環境一致)由此可知,預存程序封裝簡單的 SQL 陳述式,效率相當,且可能更低。

但很多朋友的確得出結論:預存程序的確比SQL快。為什嗎?----    因為他們測試時寫了一個不具實際意義,同時也與SQL語句的“一次用戶端調用”不具可比性的測試用預存程序。Oracle PL/SQL 描述方式如下,該方法一次調用就可以向資料表添加 1024 條記錄,連網路通訊都省了。怪不得效能有“千倍差異”!

create or replace procedure up_add( ) isdeclare     n:integer;begin    n := 0;    while( n < 1024)    begin        insert into ztest values( n, '測試字串B', '測試字串C');        n := n + 1;    end;end;

類似這樣的預存程序的實際應用是少有的。它與用戶端一次提交單條 SQL 陳述式沒有可比性:當一次只需要向DBMS提交一條新記錄,要這個預存程序幹什麼呢?






相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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