如果存储过程中有多个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
答案 0 :(得分:0)
SQL Server将更好地优化Not Exists,因为你告诉它你想要什么。它可以跳过整个“检索(很多)行”,如果存在任何行,则只返回布尔值true / false
答案 1 :(得分:-1)
优化最好在实时系统上确定(或尽可能接近测试),因为“您的里程可能会有所不同”。但是,如果您要查看帐户表中是否有任何记录,请执行SELECT COUNT(*) from accounts
。
使用not exists通常不利于优化,因此这种情况稍微容易一些。