您可以使用的前5个存储过程性能技巧

目录

性能提示 1:设置NOCOUNT ON

存储过程性能提示 2——使用完全限定名称

性能提示 3——避免使用sp_前缀

性能提示 4 ——避免使用游标

性能提示 5——减少事务范围

结论


在这篇文章中,我们将深入探讨一些可用于加速存储过程的超级简单技巧。

知道如何优化存储过程很重要,所以坚持下去,我将展示您今天可以使用的前五个存储过程性能技巧。

让我们深入研究一些可以用来加速存储过程的超级简单技巧。在开始之前,让我指出,我将向您展示的技巧是特定于存储过程的。

除了这些技巧之外,您还想了解如何优化存储过程中的查询,但这是一个完全不同的主题,所以让我们开始吧。

性能提示 1:设置NOCOUNT ON

我想谈的第一件事是,您可以实现的第一个简单的存储过程性能技巧是将命令SET NOCOUNT ON包含在您的存储过程中。它所做的就是停止发送那些消息,这些消息说这个命令影响了5行,这个命令影响了6……

如果您有一个执行大量查询或更新的存储过程,并且在运行该命令时您会看到很多消息,那么这将减少大量的网络流量。

如果您考虑一个应用程序多次调用存储过程,这真的可以加上。所以使用SET NOCOUNT ON

此外,您要做的是使用其完全限定名称调用您的存储过程。那我是什么意思?

存储过程性能提示 2——使用完全限定名称

您的存储过程按模式排序。如果您根本不做任何事情,它就会存储在dbo模式中。由于不完全限定名称,搜索然后执行存储过程需要更长的时间。

要执行根据最佳实践命名的EmployeeLoad存储过程,请使用以下命令:

EXEC dbo.EmployeeLoad

不要使用EXEC EmployeeLoad。为什么?因为不包括架构,SQL搜索所有数据库对象以查找要运行的存储过程变得更加困难。

性能提示 3——避免使用sp_前缀

此外,当我们讨论命名存储过程的主题时,不要以sp_

我想人们会想,哦,这真的很酷。我可以直接使用sp_,因为它代表存储过程。

实际上,它是一个微软保留词,如果你使用这个前缀,会发生的是每次你运行存储过程,数据库在到你的数据库查找存储过程之前,就开始查找主数据库和其他一些数据库。您只是在搜索方式中添加更多内容以查找存储过程是否存在。

更好的是,为什么不直接命名没有前缀的存储过程。所以过去的老派做法是,哦,我必须保存我的存储过程uspEmployeeLoad,这样每个人都知道它是一个存储过程。

好吧,我们知道它是一个存储过程,您可以在字典中查找,或者您的工具在存储过程下显示它。不需要加前缀。就叫吧EmployeeLoad。这是学校里很酷的做法。

性能提示 4 ——避免使用游标

下一个存储过程性能提示是尽可能在游标上使用基于集合的查询。。我的意思是,不要使用游标遍历行,当我还没有到达记录集的末尾时,就去到下一行做一些事情,保留这个值,等等……

使用窗口函数是因为窗口函数很重要,您可以使用窗口函数来获取上一条记录、结果集中的一行或结果集中的下一条记录。你可以用它们做运行平均值,用窗口函数做各种各样的事情。

而且您会发现,您最初使用游标的许多原因现在可以通过使用Window函数或递归CTE(如递归公用表表达式)来替换。

不过,这个想法是尝试远离游标,因为它们会一步一步地遍历记录集,直到它到达末尾,而且速度非常慢。所以不要使用那些。

性能提示 5——减少事务范围

此外,您要查看的一件事是减少事务范围。显然,当我们处理存储过程时,有时需要更新多个表,这就是事务派上用场的地方,因为我可以确保在此操作期间,只有当两个表都成功更新时,才会结束操作。很好地用于事务,但不要在这些语句之间放置一大堆其他垃圾或将其添加到该事务中。

就像,哦,让我们去查找其他东西或运行查询,因为当事务运行时,它是锁定的。持有锁的时间越长,发生死锁的机会就越大。

死锁基本上就像,我正在尝试锁定您已锁定的记录,而您正在尝试锁定我已锁定的记录。因此,我们进入了这个致命的拥抱,我们基本上都停下来,因为我们被卡住了。我在等你,你也在等我,我们都不能停下来,因为我们每个人都在使用我们每个人都需要的资源。所以死锁很糟糕。

如果您可以减少您在系统中实际锁定事物的时间,那么您可以减少死锁,减少锁定时间的一个好方法就是确保当您执行您进入的事务时,执行交易并退出。不要在里面放很多绒毛。

结论

所以这些是我的建议。他们真的很快。他们真的很容易。我希望您可以开始实现它们。其中一些是快速命令。有些更富有哲理。没有这个例子。这只是为了让你们思考我可能会在后面做一些例子,但这只是为了让你们开始准备下一步要做什么。

本文最初发布于Top 5 Stored Procedure Performance Tips You Can Use - Essential SQL

https://www.codeproject.com/Articles/5326830/Top-5-Stored-Procedure-Performance-Tips-You-Can-Us

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值