首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程的性能会比批处理的T-SQL话语差吗

2013-12-21 
存储过程的性能会比批处理的T-SQL语句差吗?最近我们项目用上了存储过程,下班时和两个同事交谈这个话题,发

存储过程的性能会比批处理的T-SQL语句差吗?
最近我们项目用上了存储过程,下班时和两个同事交谈这个话题,发现他们都一致认为“存储过程的执行效率很差”!其中一位同事还以他过去从事数据仓库的工作经验告诉我,性能瓶颈往往“在于存储过程中使用了游标,而循环地fetch游标来按行处理记录将会导致性能的下降”,所以他们很多时候更宁愿“在一个文件中预先写好需要的T-SQL语句序列,然后批处理它们”。

这我就糊涂了,因为我以前看过很多资料都说存储过程是有助于性能提高的(能预编译、减少网络通信量),怎么到了这些前辈的口中就变得完全相反呢。

请各位技术大虾指点指点。 谁TM叫他们用游标处理数据仓库的,用刀片砍树,用斧头切纸,然后说:刀片真烂,斧头也烂。你懂得这个道理不?
[解决办法]
性能瓶颈往往“在于存储过程中使用了游标,而循环地fetch游标来按行处理记录将会导致性能的下降”

呵呵,他们的这句话,只是说对了一半,其实任何代码,不管是批处理,还是函数,还是存储过程,甚至触发器,凡是用到了游标的地方,性能都不会好,而不是说存储过程用了游标,就是存储过程不好,而应该是游标不好。
[解决办法]
使用存储过程和使用T-SQL语句最大的区别就是存储过程在创建的时候就进行了编译以后调用时不再需要编译了速度快。而T-SQL语句每次执行都会进行编译一次速度慢。
存储过程的优点:1、预编译当一个sql语句包含在存储过程中时服务器不必每次执行它时都要分析和编译它避免了sql语句在网络中传输然后再解释的低效率问题;2、修改方便直接修改存储过程方便代码的管理;3、安全不会有sql语句注入问题;4、可以建立复杂的查询以非常复杂的方式更新数据库;5、可以使用、传送和返回参数。
缺点:1、增加复杂性业务逻辑比较复杂时不建议使用存储过程这样会增加复杂性;、2可移植性低在不同的数据库平台上很难移植。

热点排行