SQL存储过程有什么好处
优点:
离数据最近,某些情况下可获得更好性能
减少应用复杂度及应用服务器压力
需要显式调用,不会像触发器那样出现问题难以定位
使用方便
缺点:
增加数据库服务器压力。相当于将应用压力转嫁到数据库上,而应用服务器更容易扩展,也就是说大部分情况下数据库服务器资源比应用服务器资源更加珍贵。
增加网络开销。如存储过程存取数据量较大,会造成较大网络开销。
可移植性差。如系统有多中数据库,或从某种数据库迁移到另一种数据库,则很有可能遇到兼容性问题。
导致多处存在业务逻辑。存储过程某种程度就是将本应放在应用侧处理的业务逻辑放到数据库处理,这会导致业务逻辑存在于多个地方,增加调试维护困难。
在高并发系统中很可能会导致数据库压力瞬间增大。
存储过程中的复杂运算会大量消耗数据库服务器资源。
总结:
一般情况下尽量少用或不用存储过程,特别是在一个并发较高架构复杂的大型系统中,更是要减少存储过程的使用,业务逻辑的工作就应该由应用服务器处理,而不是交给数据库。很多时候存储过程确实可以快速解决问题,但它的维护性、扩展性、移植性等都不好。如果你的系统很小,架构比较简单,并且开发人员对存储过程熟悉,那么可以考虑使用存储过程减少工作量;但随着系统增加,架构变复杂,开发人员越来越多,这时存储过程的存在可能会导致更多的问题。当然,定时ETL或报表统计之类的任务,还是可以考虑使用存储过程来做的。