2011-09-03 69 views

回答

33

存儲過程是在PL/SQL語言指令序列。是由某些DBMS實現的編程語言,可讓您存儲經常應用於模型的查詢序列,並與應用程序層共享處理負載。

預處理語句是用佔位符代替實際值書面查詢。您編寫查詢並且僅由DBMS編譯一次,然後您只需將值傳遞給佔位符即可。使用預準備語句的好處是可以顯着提高性能,並保護您的應用程序免受SQL注入攻擊。

區別在於你不能存儲準備好的語句。每次需要執行時都必須「準備」它們。另一方面,存儲過程可以存儲,並與模式關聯,但是您需要了解PL/SQL才能編寫它們。

您必須檢查您的DBMS是否支持它們。

兩者都是非常有用的工具,你可能要結合起來。

希望這個簡短的解釋對你有用!

10

存儲過程是存儲在數據庫中 - 這取決於數據庫(甲骨文,MS SQL服務器等),它被編譯並可能準備優化當你在服務器上創建它...

已準備語句是由服務器和執行計劃解析由服務器準備好執行,只要你運行該語句創建的語句...通常這是有道理的當一個語句運行不止一次......根據不同的DB服務器上(甲骨文等),甚至有時配置選項,這些「準備」或者是會話特定的或「全球性」 ......

沒有「賭注之三」當你比較這兩個,因爲他們有自己的具體使用情況......

0

其他的答案,在這個已經暗示,但我想列出利弊明確:每個查詢更多的加工

  1. 存儲過程

    PROS比直接查詢快,因爲服務器會預編譯它們。

  2. 每個查詢只需要寫入一次。即使在不同的會話和不同的連接中,它也可以根據需要執行多次。
  3. 允許查詢包含編程結構(如循環,條件語句和錯誤處理),這些結構在SQL中不可能或難以編寫。

缺點

  1. 需要的任何編程語言,數據庫服務器使用的知識。
  2. 有時可能需要特殊權限才能寫入或調用它們。

預處理語句

的觀光

  1. 像存儲程序,因爲查詢是預編譯的很快。

缺點

  1. 需要重新編寫與每個連接或會話。
  2. 爲了節省開銷,每個準備好的語句必須多次執行(例如循環中)。如果一次查詢只執行一次,則準備好的語句的開銷會比返回更多,因爲服務器無論如何都需要編譯SQL,而且還要編寫準備好的語句。

對於我的錢,我每次都會使用存儲過程,因爲他們只需要寫一次。之後,每次調用該過程都會節省時間,無論您是否在建立新連接,以及是否在循環中調用該過程。唯一的缺點是需要花一些時間學習編程語言。如果我沒有寫存儲過程的權限,我會使用一個準備好的語句,但前提是我必須在同一個會話中多次重複進行相同的查詢。

這是我在經過幾個月的關於這兩個構造之間差異的離合研究之後得出的結論。如果任何人能夠糾正我所做的錯誤概括,這將是值得聲譽損失。