程序員說:存儲過程還是SQL語句,這是一個問題。
江湖現在有三個流派,一個是SQL語句流的,崇尚使用SQL語句,一派是存儲過程派的,崇尚用存儲過程說話,還有一派是中庸派的,講求和諧,所以也就前兩派吵得厲害,中庸派的看熱鬧。現在SQL派的有Nhibernate為首的眾多ORM助陣,最近風生水起比較得意,存儲過程派也有自己的殺手秘籍,兩派互不相讓,爭斗由來已久。
存儲過程派的追求速度,所謂天下無功無堅不破,唯快不破,這也是存儲過程派的人行走江湖的最大本錢。之前存儲過程派的攻擊SQL語句派的還有一個秘籍就是安全,不過現在都沒人用連接String的動態SQL的了,這招也就失效了。
SQL語句派是資格很老的流派,但是新手居多,老資格很多投奔敵營存儲過程派了。Java幫的人很多都是SQL語句派的,而存儲過程派的以微軟幫的居多。
不過存儲過程派也有軟肋,可移植性就是其一,還有一點就是可擴展性,因為一般大型的Web應用程序都是多Web服務器,然后用雙數據庫服務器做雙機熱備,其中一臺開機,但是是閑置的,這里只是解決單點故障的問題,但是形成了多Web應用服務器,單數據庫服務器的情況,如果所有的運算都用存儲過程實現,那么會造成數據庫服務器負擔過重,而Web服務器負荷不足的情況,而擴展數據庫服務器的話就會非常的麻煩,而且投資較大,程序也需要改,而投資Web服務器就相對便宜而且擴容更加簡單。
人在江湖漂哪有不挨刀,所以中庸一點比較保險,我比較傾向于用把較多的負擔放到程序里來,而降低數據庫得負擔,因為只要數據庫扛得住,再增加Web服務器那是比較容易的,但是一旦數據庫服務器扛不住了我們就只有哭了。一般報表阿,還有一些結果集比較復雜的我就用存儲過程來包裝,一般的查詢和CUID操作我都是找個ORM來搞定。
引自:http://www.cnblogs.com/Alexander-Lee/archive/2007/04/01/696070.html