首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程与网络拥塞

存储过程与网络拥塞
EN

Database Administration用户
提问于 2012-10-27 06:50:22
回答 2查看 568关注 0票数 2

当我去面试时,面试官问我“存储过程的好处是什么?”我开始回答,但当我说“它可以减少网络拥塞”时,他突然说“不,它没有”。

我突然停了下来,不敢问他为什么。面试结束后,我在网上搜索了很多,但我发现了我说的观点,但没有解释。于是我问自己,说了几句话:

由于存储过程是预编译的,即已经为其创建了执行计划,因此它提高了执行的速度。但是对于将一些变量传递给SP的情况,这些变量需要转到服务器执行,并且应该为每个变量检索不同的结果。

因此,我的观点是,面试官是正确的:网络拥塞并没有减少,每次变量必须传递到数据库并返回结果时,网络就会忙于这些。对吗?

我的说法正确吗?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-10-27 14:34:44

在Server中,查询优化器执行以下步骤来执行任何查询(存储过程调用或即席SQL语句):

  1. 从语法上检查查询
  2. 如果可以的话-它会检查计划缓存,看看它是否已经有了该查询的执行计划
  3. 如果有执行计划,则使用该计划并执行查询。
  4. 如果还没有计划,则确定执行计划。
  5. 该计划存储在计划缓存中,以供以后重用。
  6. 执行查询。

关键是:即席SQL和存储过程是没有区别的。

如果一个即席SQL查询正确地使用了参数--无论如何,它都应该使用参数来防止SQL注入攻击--那么它的性能特性与执行存储过程并没有什么不同,而且肯定也不差。

存储过程还有其他好处(例如,不需要授予用户直接访问表的权限),但就性能而言,使用适当参数化的临时SQL查询与使用存储过程一样有效。

票数 4
EN

Database Administration用户

发布于 2016-06-16 01:07:58

如果有一个中等大小的SQL语句(因此它适合于单个网络数据包),那么从应用程序执行该语句或将其打包为SP并执行SP将在网络上完全相同。

但是,我经常看到的一种模式是,应用程序函数需要几个SQL语句才能产生结果。假设我们正在给DB写一份订单。首先验证客户(1),然后是产品代码(2),然后是库存级别(3),然后编写订单报头(4),返回定单行(5)中用作外键的ID。如果每个调用都是单独执行的,那么这是对DB服务器的五次往返。如果将值作为参数传递给SP,则它是一个具有单个响应的请求--一次往返。

因此,我认为将业务功能中SQL密集型部分打包为存储过程确实可以减少典型场景中的网络负载。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/27724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档