当我们业务处理的逻辑不太复杂,且需要访问的数据量是海量的时候,建议使用sp对数据做操作而不是程序。
原因:
1.从耗能的角度:
海量的数据处理不管放在sp里面还是代码里面,都会增加服务器的负载。放在sp里面处理,会增加其所在数据库服务器磁盘IO的压力;放在代码里面处理,需要传到应用服务器处理,势必会增加网络IO压力,进而可能影响同一网络的其他application的运行。相比之下,放在sp里面处理的代价比较小。
2.从开发的角度:
1)代码编写方便,易重构。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和相关运算;
2)相对稳定,存储过程一旦调试完成通过后就能够稳定运行,这与各个业务在一段时间内是相对稳定是匹配的;
3)耦合性低,存储过程大大减少了业务系统与数据库的交互,一定程度上降低了业务系统与数据库的耦合。
3.从性能的角度:
1)执行率高,如果有几千上亿条数据需要计算总额,如果用SQL实现就是聚合求平均,有索引的情况下会很快返回结果。(相对于程序代码来说)
4.从运维的角度 :
1)将逻辑运算写在sp里面进行处理,当有data issue的时候,维护人员能够查看相关的sql语句进行初步的trouble shooting;
2)DBA能够查看其性能并进行调优。