使用存储过程还是以连接字符串和所有其他好东西的旧方式做更好?我们的系统最近运行缓慢,我们的经理希望我们尝试看看是否可以稍微加快一下速度,我们正在考虑将一些旧的数据库调用更改为存储过程。这值得吗?
使用存储过程还是以连接字符串和所有其他好东西的旧方式做更好?我们的系统最近运行缓慢,我们的经理希望我们尝试看看是否可以稍微加快一下速度,我们正在考虑将一些旧的数据库调用更改为存储过程。这值得吗?
首先要做的是检查数据库是否设置了所有必要的索引。分析您的代码缓慢的位置,并检查相关的SQL语句和与之相关的索引。看看是否可以重写SQL语句以使其更有效率。检查循环中是否每次迭代都重新编译SQL(准备)语句,而不是在外部仅编译一次。
如果实现非常低效,将SQL语句移动到存储过程中并不能帮助解决问题。但是,数据库会知道如何最优化SQL,它也不需要反复执行此操作。这也可以通过将复杂的SQL语句转换为简单的过程调用来使客户端代码更清晰。
我建议您快速浏览一下存储过程是邪恶的。
测量。测量。测量。“慢”在性能调优方面没有多少意义。什么是慢的?哪个确切的事务是慢的?哪个表是慢的?聚焦。
控制所有变化。所有的。有什么变化吗?操作系统补丁?RDBMS更改?应用程序更改?某些事情发生了变化以减慢事情的进展。
检查规模上的约束。一张表是否因为80%的数据是历史数据,你每年只用于报告而放缓了速度?
如果存储过程能避免发送大量数据或避免与服务器进行往返通信,它们就可以真正地提供帮助,因此如果您的应用程序存在这些问题,则它们可能非常有价值。
1/(1-X)
,其中X是负载比例。这描述了平均排队长度或等待时间。因此,当负载激增时,正在饱和的服务器将非常迅速地变慢。是的,存储过程是实现良好性能的一大步。主要原因是存储过程可以预编译并缓存其执行计划。
但是,您需要首先分析真正的性能瓶颈所在,以便有条不紊地进行此练习。
正如其中一个回复中建议的那样,尝试使用分析器工具分析问题所在 - 例如,您是否需要创建索引...
干杯
就像以上所有帖子所建议的那样,您首先要清理SQL语句,拥有适当的索引。缓存可能会很棘手,除非我了解您想要实现什么,否则我不能发表评论。
但是关于sprocs的一件事,请确保不要让它生成动态SQL语句
因为首先,这将是无意义的,并且可能会受到SQL注入攻击...这在我调查过的项目中曾经发生过。
我建议主要使用sprocs进行更新,然后是选择语句。祝你好运 :)
你永远无法提前预测。你必须去做并且测量差异,因为在十次中有九次,瓶颈不在你想象的地方。
如果你使用存储过程,你就不需要传输数据。数据库通常执行[编辑]复杂[/编辑]存储过程[编辑]带有循环、高级数学等[/编辑]会比较慢。所以这真的取决于你需要做多少工作,你的网络有多慢,数据库执行这个特定代码有多快等等。