gpt4 book ai didi

sql - 为什么执行存储过程比脚本中的 SQL 查询更快?

转载 作者:行者123 更新时间:2023-12-02 00:33:10 24 4
gpt4 key购买 nike

事实上,如果我从应用程序调用存储过程,我需要连接到我的数据库。

那么,为什么调用“存储过程”应该比“传递 SQL 查询”字符串执行得更快?

最佳答案

SQL Server 基本上通过以下步骤来执行任何查询(存储过程调用或即席 SQL 语句):

1)语法检查查询
2)如果没问题 - 它会检查计划缓存以查看是否已经有该查询的执行计划
3)如果有一个执行计划 - 该计划被(重新)使用并执行查询
4)如果还没有计划,则确定执行计划
5) 该计划被存储到计划缓存中以供以后重用
6)执行查询

要点是:即席 SQL 和存储过程在处理上没有什么不同

如果临时 SQL 查询正确使用参数(无论如何它都应该这样做,以防止 SQL 注入(inject)攻击),那么它的性能特征与执行存储过程没有什么不同,而且绝对不差

存储过程还有其他好处(例如,无需授予用户直接表访问权限),但就性能而言,使用正确参数化的即席 SQL 查询与使用存储过程一样高效程序。

更新:使用存储过程优于非参数化查询,这主要有两个原因:

  • 由于每个非参数化查询都是 SQL Server 的新的、不同的查询,因此它必须为每个查询执行确定执行计划的所有步骤(从而浪费时间- 并且还浪费计划缓存空间,因为将执行计划存储到计划缓存中最终并没有真​​正的帮助,因为该特定查询可能不会再次执行)

  • 非参数化查询面临 SQL 注入(inject)攻击的风险,应不惜一切代价避免

关于sql - 为什么执行存储过程比脚本中的 SQL 查询更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com