優勢:
1、提高效能
sql語句在建立過程時進行分析和編譯。 儲存過程是預編譯的,在首次執行乙個儲存過程時,查詢優化器對其進行分析、優化,並給出最終被存在系統表中的儲存計畫,這樣,在執行過程時便可節省此開銷。
2、降低網路開銷
儲存過程呼叫時只需用提供儲存過程名和必要的引數資訊,從而可降低網路的流量。
3、便於進行**移植
資料庫專業人員可以隨時對儲存過程進行修改,但對應用程式源**卻毫無影響,從而極大的提高了程式的可移植性。
4、更強的安全性
1)系統管理員可以對執行的某乙個儲存過程進行許可權限制,避免非授權使用者對資料的訪問
2)在通過網路呼叫過程時,只有對執行過程的呼叫是可見的。 因此,惡意使用者無法看到表和資料庫物件名稱、嵌入自己的 transact-sql 語句或搜尋關鍵資料。
3)使用過程引數有助於避免 sql 注入攻擊。 因為引數輸入被視作文字值而非可執行**,所以,攻擊者將命令插入過程內的 transact-sql 語句並損害安全性將更為困難。
4)可以對過程進行加密,這有助於對源**進行模糊處理。
劣勢:
1、儲存過程需要專門的資料庫開發人員進行維護,但實際情況是,往往由程式開發員人員兼職
2、設計邏輯變更,修改儲存過程沒有sql靈活
在通常的專案研發中,用儲存過程卻相對較少,這是為什麼呢?
分析原因如下:
1)沒有特定的資料庫開發人員,普通程式設計師兼職進行資料庫操作
2)程式設計師往往只需操作程式,即可完成資料訪問,無需再在資料庫上進行開發
3)專案需求變動比較頻繁,修改sql語句比較方便,特別是涉及邏輯變更
基於實際應用的經驗,給予如下建議:
1、在一些高效率或者規範性要求比較高的專案,建議採用儲存過程
2、對於一般專案建議採用引數化命令方式,是儲存過程與sql語句一種折中的方式
3、對於一些演算法要求比較高,涉及多條資料邏輯,建議採用儲存過程
儲存過程與SQL的對比?
優勢 1 提高效能 sql語句在建立過程時進行分析和編譯。儲存過程是預編譯的,在首次執行乙個儲存過程時,查詢優化器對其進行分析 優化,並給出最終被存在系統表中的儲存計畫,這樣,在執行過程時便可節省此開銷。2 降低網路開銷 儲存過程呼叫時只需用提供儲存過程名和必要的引數資訊,從而可降低網路的流量。3 ...
儲存過程與SQL語句如何選擇
58到家資料庫30條軍規,有一條是 禁止使用儲存過程 檢視 觸發器 event 高併發大資料的網際網路業務,架構設計思路是 解放資料庫cpu,將計算轉移到服務層 併發量大的情況下,這些功能很可能將資料庫拖死,業務邏輯放到服務層具備更好的擴充套件性,能夠輕易實現 增機器就加效能 資料庫擅長儲存與索引,...
分頁SQL語句 儲存過程
分頁儲存過程一 alter procedure dbo fy startrowindex int,maximumrows int asbegin select from select ugid,uname,row number over order by ugid desc rownum from ...