为什么会出现存储过程?存储过程到底有什么用?

原文:存储过程到底有什么用? - 虎哥的回答 - 知乎 https://www.zhihu.com/question/21345483/answer/656171236


存储过程到底有什么用?

最近有个朋友在研究存储过程的事儿。看着他在那里纠结,突然想问下存储过程到底有用么?

bing了一下,在一些解释中:
1、存储过程集合了sql语句并且缓存,大大提高语言执行效率
2、增加安全性
3、保证原子性

对这些东西有些疑问:
1、据说现在sql语句也会进行缓存,是否提高效率,提高多少效率还真不好说
2、安全性为什么要写在数据库里面,不是应该在程序里面就保证好了么
3、原子性的东西也可以在程序里面实现,为什么不?

总之,感觉存储过程就是把数据库访问的逻辑与程序分离而放在数据库上,这到底是为了什么


我觉得凡事不盲从、都问问为什么挺好的,要向你学习。

感觉bing出来的三条都不是存储过程被使用的主要原因。主要原因应该是大量数据计算的时候,把数据从数据库中搬出来、计算好再存回去,时间太漫长了。搬出来、存回去的时间要远远大于计算的时间。

但是,大量数据计算的情况,一般只会发生在数据批量处理的场景,也就是每天晚上算好了,存入结果表,第二天上班用来查询。

回过头来看你bing的三条。事实上,少量数据的增删改查,用java实现挺好的,安全性和原子性可以通过MVC分层来保证。请中高级程序员负责后台,保证数据处理的代码质量,一般也不会出什么乱子。至于java提交SQL给数据库,需要解析的时间成本,这是数据库的强项,不会成为瓶颈。而且java也提供PreparedStatement的预编译缓存机制,所以没问题的。

你最后说的,存储过程“把数据库访问的逻辑与程序分离而放在数据库上”这其实不是什么好事,1、数据库压力太大,会成为性能瓶颈,扩容太昂贵;2、移植到其他数据库会非常困难;3、开发人员有数据库高权限,数据安全受影响。



作者:虎哥
链接:https://www.zhihu.com/question/21345483/answer/656171236
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章