SQLServer存储过程
上学期在公司实习时参与公司国土方面的一张图项目,发现前端的快速查找、统计分析等等其实都是调用的数据库服务器端的存储过程或者视图,之前在学校的时候一直对存储过程懵懵懂懂的,不知道具体该如何使用才能达到优化的目的,最近查看了很多资料,觉得存储过程真的是大有用处。
先来说说使用存储过程的优点:
1、改善性能
SQL语句的执行需要先编译在执行,存储过程就是一组为了完成特定功能的SQL语句集,它只在创造时进行编译,以后每次执行时都不需要再重新编译,而一般SQL语句没执行一次就要重新编译一次,同时,存储过程是经过实现编译好的属于服务器端的程序,能节省语法分析时间,这样前端调用的时候能够提高运行效率,而且调用的次数越多基本上就越快。
2、安全
存储过程放在数据库服务器端,在前端只需要调用名字和参数就行了,防止SQL注入;在一张图项目中,公司专门开发了一个DataCenter也就是数据转换中心,将所有的查询和统计分析都写成了服务,这样在前端只需要调用服务,配置需要调用的存储过程的名字和参数就可以返回用户所需要的效果。
3、减少网络流量
只需要传入存储过程的名字和参数值,不要传输完整的SQL,节省流量。
4、封装
可用于操作数据库对象的方法,用户只需要知道它的输入输出参数并理解其目的即可。
5、重要性
针对复杂逻辑,应用已经测试好的存储过程,不容易发生错误。
最后来说说使用存储过程的缺点:
1.加重了服务器的负担;
2.可能造成并发冲突;
3.可移植性较差。
关于第3点最近公司里正好遇到,总经理在交流会议上反复强调不能遇到什么都用存储过程,使用了一大堆的临时表的临时变量,对数据库的性能有影响不说,使数据库的版本化成了最大的问题。所以还是建议要适当的使用存储过程,不要滥用。