存储过程优化的执行计划



如果存储过程中有多个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

SQL Server将更好地优化Not Exists,因为您告诉它您想要什么。它可以跳过整个"检索(很多)行",如果有任何行存在,则只返回布尔值true/false。

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

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

最新更新