存储过程优化执行计划?

发布于 2024-11-10 11:25:09 字数 252 浏览 2 评论 0原文

如果存储过程中有多个 if 条件,我猜执行计划的优化程度会较低,那么下面的后者是否更好?

if not exists (select * from accounts)
 begin
  raiseerror('error', 16, 1);
 end

begin try
select 1/0 from accounts
end try
begin catch
  raiseerror('error', 16,1)
end catch

If you have multiple if conditions in a stored procedure, I'm guessing the execution plan is going to be less optimized so is the latter below better?

if not exists (select * from accounts)
 begin
  raiseerror('error', 16, 1);
 end

begin try
select 1/0 from accounts
end try
begin catch
  raiseerror('error', 16,1)
end catch

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何处潇湘 2024-11-17 11:25:09

SQL Server 会更好地优化 Not Exists,因为你告诉它你想要什么。它可以跳过整个“检索(很多)行”,并且如果存在任何行,则仅传回布尔值 true/false

SQL Server will optimize the Not Exists better because you're telling it what you want. It can skip the whole "retrieve a (lot of) rows" and just pass back a boolean true/false if any rows exist

闻呓 2024-11-17 11:25:09

优化最好在实时系统上确定(或在测试中尽可能接近),因为“您的里程可能会有所不同”。但是,如果您想查看帐户表中是否有任何记录,只需执行 SELECT COUNT(*) from accounts 即可。

使用不存在通常不利于优化,因此这种情况更容易一些。

Optimization is best determined on the live system (or as close as you can get in test) since "your mileage may vary". However, if you are looking to see if there are any records in the accounts table, just do SELECT COUNT(*) from accounts.

Using a not exists is usually bad for optimization, so this case is a bit easier.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文