天天看點

mysql存儲過程的優缺點

一、存儲過程介紹:

  存儲過程(Stored Procedure)是一組為了完成特定功能的SQL 語句集,經編譯後存儲在資料庫。使用者通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。

1.存儲過程隻在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而
一般SQL 語句每執行一次就編譯一次,是以使用存儲過程可提高資料庫執行速
度。
2.當對資料庫進行複雜操作時(如對多個表進行
Update,Insert,Select,Delete 時),可将此複雜操作用存儲過程封裝起來
與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重複使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定隻有某個使用者才具有對指定存儲過程的使用權。      

二、使用存儲過程的優缺點:

相對于直接使用SQL 語句,在應用程式中直接調用存儲過程有以下好處: 

  1.減少網絡通信量:調用一個行數不多的存儲過程與直接調用SQL 語句的網絡通信量可能不會有很大的差别,可是如果存儲過程包含上百行SQL 語句,那麼其性能絕對比一條一條的調用SQL 語句要高得多。 

  2.執行速度更快:有兩個原因:首先,在存儲過程建立的時候,資料庫已經對其進行了一次解析和優化。其次,存儲過程一旦執行,在記憶體中就會保留一份這個存儲過程,這樣下次再執行同樣的存儲過程時,可以從記憶體中直接調用。 

  3.更強的适應性:由于存儲過程對資料庫的通路是通過存儲過程來進行的,是以資料庫開發人員可以在不改動存儲過程接口的情況下對資料庫進行任何改動,而這些改動不會對應用程式造成影響。 

  4.分布式工作:應用程式和資料庫的編碼工作可以分别獨立進行,而不會互相壓制。

  5.可以防止sql注入。

缺點: 

  1.如果更改範圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其傳回的資料,則您仍需要更新程式集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。 

  2.可移植性差  由于存儲過程将應用程式綁定到 SQL Server,是以使用存儲過程封裝業務邏輯将限制應用程式的可移植性。

三、存儲過程(stored procedure)、存儲例程(store routine)、存儲函數差別:

  Mysql存儲例程實際包含了存儲過程和存儲函數,它們被統稱為存儲例程。 

mysql存儲過程的優缺點