当我去面试时,面试官问我“存储过程的好处是什么?”我开始回答,但当我说“它可以减少网络拥塞”时,他突然说“不,它没有”。
我突然停了下来,不敢问他为什么。面试结束后,我在网上搜索了很多,但我发现了我说的观点,但没有解释。于是我问自己,说了几句话:
由于存储过程是预编译的,即已经为其创建了执行计划,因此它提高了执行的速度。但是对于将一些变量传递给SP的情况,这些变量需要转到服务器执行,并且应该为每个变量检索不同的结果。
因此,我的观点是,面试官是正确的:网络拥塞并没有减少,每次变量必须传递到数据库并返回结果时,网络就会忙于这些。对吗?
我的说法正确吗?
发布于 2012-10-27 14:34:44
在Server中,查询优化器执行以下步骤来执行任何查询(存储过程调用或即席SQL语句):
关键是:即席SQL和存储过程是没有区别的。
如果一个即席SQL查询正确地使用了参数--无论如何,它都应该使用参数来防止SQL注入攻击--那么它的性能特性与执行存储过程并没有什么不同,而且肯定也不差。
存储过程还有其他好处(例如,不需要授予用户直接访问表的权限),但就性能而言,使用适当参数化的临时SQL查询与使用存储过程一样有效。
发布于 2016-06-16 01:07:58
如果有一个中等大小的SQL语句(因此它适合于单个网络数据包),那么从应用程序执行该语句或将其打包为SP并执行SP将在网络上完全相同。
但是,我经常看到的一种模式是,应用程序函数需要几个SQL语句才能产生结果。假设我们正在给DB写一份订单。首先验证客户(1),然后是产品代码(2),然后是库存级别(3),然后编写订单报头(4),返回定单行(5)中用作外键的ID。如果每个调用都是单独执行的,那么这是对DB服务器的五次往返。如果将值作为参数传递给SP,则它是一个具有单个响应的请求--一次往返。
因此,我认为将业务功能中SQL密集型部分打包为存储过程确实可以减少典型场景中的网络负载。
https://dba.stackexchange.com/questions/27724
复制相似问题