存储过程优化执行计划?

时间:2011-05-31 22:42:11

标签: sql sql-execution-plan

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

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

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