我們正在開發一個以Oracle 9i作爲後端的Visual Studio.NET 2008應用程序。存儲過程的使用是否會比Inline SQL更快?這是與我的合作程序員進行的辯論。對於Microsoft.NET應用程序,Oracle存儲過程比行SQL更快嗎?
我們使用Oracle的ODP.NET(Oracle Data Provider for .NET)。
謝謝。
我們正在開發一個以Oracle 9i作爲後端的Visual Studio.NET 2008應用程序。存儲過程的使用是否會比Inline SQL更快?這是與我的合作程序員進行的辯論。對於Microsoft.NET應用程序,Oracle存儲過程比行SQL更快嗎?
我們使用Oracle的ODP.NET(Oracle Data Provider for .NET)。
謝謝。
雖然我很想回答「不」或「我不這麼認爲」,但知道這個問題的答案的唯一方法是去親自測量。使用像JetBrains dotTrace和TOAD自己的分析器這樣的分析器來查明。
所有其他答案都是推測性的。
如果您構建存儲過程(PL/SQL包)的方式會更快,這樣數據和客戶端之間的數據傳輸量將減少。
它應該是。將內聯SQL發送到數據庫時,引擎必須解析並執行。存儲過程在創建時正在被解析(並編譯)。所以至少你正在獲得解析時間。
我預計存儲過程在幾乎所有情況下都會更快。
但它主要取決於你的代碼。
例如,如果您從數據庫中獲得結果集,然後使用此數據執行其他查詢,則最終會導致網絡流量中的大量開銷。如果您忘記爲請求使用單個連接,則情況尤其如此。
然後使用單個存儲過程返回聚合數據(當然,如果可能的話)可能更有效。
Jon Limjap說:「所有其他答案都是推測性的。」
這句話有很多道理。有很多因素:數據庫服務器如何設置?網絡速度/可靠性如何? SQL如何? PL/SQL如何?如果我想(並且不經意地,過去的項目!),我可以編寫非常慢的SQL和/或PL/SQL。所以如果可以的話,試試兩個。
希望從應用程序提交的SQL將使用綁定變量,因此重複執行不會硬解析。在PL/SQL中推薦綁定變量可能是合適的,因爲它比綁定它們容易得多,因此更好的實踐被提升。 – 2009-07-31 10:18:30