java存储过程与sql语句_存储过程与SQL语句怎么选择
應(yīng)用存儲(chǔ)過(guò)程的優(yōu)點(diǎn):
1.具有更好的性能
存儲(chǔ)過(guò)程是預(yù)編譯的,只在創(chuàng)建時(shí)進(jìn)行編譯,以后每次執(zhí)行存儲(chǔ)過(guò)程都不需再重新編譯,
而一般 SQL 語(yǔ)句每執(zhí)行一次就編譯一次,因此使用存儲(chǔ)過(guò)程可以提高數(shù)據(jù)庫(kù)執(zhí)行速度。
2.功能實(shí)現(xiàn)更加靈活
存儲(chǔ)過(guò)程中可以應(yīng)用條件判斷和游標(biāo)等語(yǔ)句,有很強(qiáng)的靈活性,可以直接調(diào)用數(shù)據(jù)庫(kù)的一些內(nèi)置函數(shù),完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算。
3.減少網(wǎng)絡(luò)傳輸
復(fù)雜的業(yè)務(wù)邏輯需要多條 SQL 語(yǔ)句,當(dāng)客戶機(jī)和服務(wù)器之間的操作很多時(shí),
將產(chǎn)生大量的網(wǎng)絡(luò)傳輸。如果將這些操作放在一個(gè)存儲(chǔ)過(guò)程中,那么客戶機(jī)和服務(wù)器之間的網(wǎng)絡(luò)傳輸就會(huì)減少,降低了網(wǎng)絡(luò)負(fù)載。
4.具有更好的安全性
(1)數(shù)據(jù)庫(kù)管理人員可以更好的進(jìn)行權(quán)限控制,存儲(chǔ)過(guò)程可以屏蔽對(duì)底層數(shù)據(jù)庫(kù)對(duì)象的直接訪問(wèn),使用 EXECUTE 權(quán)限調(diào)用存儲(chǔ)過(guò)程,無(wú)需擁有訪問(wèn)底層數(shù)據(jù)庫(kù)對(duì)象的顯式權(quán)限。
(2)在通過(guò)網(wǎng)絡(luò)調(diào)用過(guò)程時(shí),只有對(duì)執(zhí)行過(guò)程的調(diào)用是可見的。無(wú)法看到表和數(shù)據(jù)庫(kù)對(duì)象名稱,不能嵌入SQL 語(yǔ)句,有助于避免 SQL 注入攻擊。
存儲(chǔ)過(guò)程的弊端:
1.架構(gòu)不清晰,不夠面向?qū)ο?/p>
存儲(chǔ)過(guò)程不太適合面向?qū)ο蟮脑O(shè)計(jì),無(wú)法采用面向?qū)ο蟮姆绞綄I(yè)務(wù)邏輯進(jìn)行封裝,
業(yè)務(wù)邏輯在存儲(chǔ)層實(shí)現(xiàn),增加了業(yè)務(wù)和存儲(chǔ)的耦合,代碼的可讀性也會(huì)降低,
2.開發(fā)和維護(hù)要求比較高
存儲(chǔ)過(guò)程的編寫直接依賴于開發(fā)人員,如果業(yè)務(wù)邏輯改動(dòng)較多,需要頻繁直接操作數(shù)據(jù)庫(kù),
大量業(yè)務(wù)降維到數(shù)據(jù)庫(kù),很多異常不能在代碼中捕獲,出現(xiàn)問(wèn)題較難排查,需要數(shù)據(jù)庫(kù)管理人員的幫助。
3.可移植性差
過(guò)多的使用存儲(chǔ)過(guò)程會(huì)降低系統(tǒng)的移植性。在對(duì)存儲(chǔ)進(jìn)行相關(guān)擴(kuò)展時(shí),可能會(huì)增加一些額外的工作。
存儲(chǔ)過(guò)程與SQL語(yǔ)句如何抉擇:
普通的項(xiàng)目開發(fā)中,不建議大量使用存儲(chǔ)過(guò)程,對(duì)比SQL語(yǔ)句,存儲(chǔ)過(guò)程適用于業(yè)務(wù)邏輯復(fù)雜,比較耗時(shí),同時(shí)請(qǐng)求量較少的操作,例如后臺(tái)大批量查詢、定期更新等。
(1)當(dāng)一個(gè)事務(wù)涉及到多個(gè)SQL語(yǔ)句時(shí)或者涉及到對(duì)多個(gè)表的操作時(shí)可以考慮應(yīng)用存儲(chǔ)過(guò)程
(2)在一個(gè)事務(wù)的完成需要很復(fù)雜的商業(yè)邏輯時(shí)可以考慮應(yīng)用存儲(chǔ)過(guò)程
(3)比較復(fù)雜的統(tǒng)計(jì)和匯總可以考慮應(yīng)用后臺(tái)存儲(chǔ)過(guò)程
總結(jié)
以上是生活随笔為你收集整理的java存储过程与sql语句_存储过程与SQL语句怎么选择的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IT运维是什么?
- 下一篇: moia调度mysql到hive_创立打