|
存储过程的好外,我就不多说了,想必各位都已了然于胸 针对这两个所谓的缺点,我提出我的一些看法: 最常见的是,在实际运用中,为了减少DATASET数据集的大小和提高性能,通常我们只SELECT当前需要的字段,但是,随着发展,你可以需要其他字段,这时,如果用嵌入SQL,就要修改SQL语句,编译,再写上绑定该字段的表达式,但是,如果用存储过程,你只要绑定表达式,然后给存储过程中加上这个字段名就可以了. 最后,以上观点仅体现个人观点,不过,绝不是书上看来的,而是自己做了几个项目,边做边体会到的
存储过程还有个问题就是现在没有非常有效的存储过程版本控制软件
ttyp 评论于 2006-01-10 16:42 回复 但如果说系统的对性能的要求很高,而且数据量也确实非常大,那么在没有替代方案的情况下,应该是选择存储过程的。 1. 用普通 sql 取不到插入的 id 值? 就能取到了。 2. 说 sp 的调用就可以用 SqlParameter 因此没有安全问题,普通的 sql 就一定要用拼接的写法,从而有安全问题?这个完全没有道理。拼接 sql 是不管你写何种方式的代码都不被推荐的一个做法。 3. 关于性能,sp 的性能优化其实很有限,不要迷信这个。经常使用的 sql, 数据库也会作出优化。差别没有你想像的大。 其他。。。 还有几点值得商榷: 建议你阅读那篇著名的讨论: 木野狐 评论于 2006-01-10 23:12 回复 我作为3名核心工程师之一搞过省级电信的某系统,海量数据库,很多表每天新增的记录都是数百万级别,第一期工程就是用的存储过程,极不稳定(要求后台24小时无人值守的工业级系统,却每过几天服务器要当机1次),再括号-第一期工程师A,10年来月薪最低时5万人民币,工程师B,江总书记接见的全国技术精英10佳青年-再括号结束. 系统确实很大,出了问题查起来真累,哪怕这些牛人去查,于是省管局决定搞第二期,我参与进来,他们走了一人.我负责的部分效率提高了至少一个数量级以上.系统交付使用了,我拿到钱走人(本来就是火线加入,干完就走的,属于炒更类人物),但后来听说服务器端还是老毛病---每过几天要当机1次. 后来我自己负责的系统在研发阶段也开始大量用起存储过程,实施时也出现上述问题,处理逻辑未发现问题,慢慢去掉存储过程,当几乎全用SQL语句取代时,系统居然运转OK了.于是猜想问题出在存储过程上,系统调度上的资源消耗可能还大过所谓使用存储过程带来的性能提高.好笑的是,我专门对比测试却未发现使用存储过程带来的性能提高(处理时间). 我的经验(没有理论依据,所以心虚),如果能不用存储过程,打死也不用. 至于用普通 sql 取不到插入的 id 值,上面很多人已提到这个根本不是问题. fisher 评论于 2006-01-11 09:24 回复 诚然SP的选择与否属于一个技术问题,但讨论用SP好还是直接写SQL语句好,则必然成为一个哲学问题,或者一个方法论的问题。无数事例和先贤都告诉我们,单纯的说好与不好都是不可能长久正确的。技术在不断的进步,今天的观点和昨天的观点就有可能不同,所以说,哪个好?没有一个是绝对好的,完全要根据你的应用需求来选择。 同时,比考虑性能等更重要的是,应该咨询一下开发团队的伙伴们,多数人习惯或者乐于使用的方式,就是我们应该选择的方式,我们的目的是一起把程序作出来,让它按照客户的需求运行,而今天任何一个人单打独干什么都干不成,不是吗? 至于到底SP和SQL语句哪个更快,完全取决于是谁在写代码,我见过3K多SP的数据库,也见过一个SP都没有,但数据量比上一个系统更大的程序,都运行的非常好。 另外看到有提到数据库移植的问题,大家认真地回忆一下,我们做过的程序里,真是需要数据库移植,而且最终也确实进行了数据库移植的有多少? 用SQL语句可以接收到新生成的记录的IDENTIFY值 我也常常用存储过程 我是特殊才用SP。(如利用SP 返回操作 报错信息。) 2.SP 修改很方便! 应用程序需要重新编译! 3.动态 SQL 是 SQL Inject 攻击之源!(要用安全的参数化SQL)
-------引:http://heroman.cnblogs.com/archive/2006/01/10/314631.aspx |
也论该不该在项目中使用存储过程代替SQL语句
2006-08-25 10:58
留言