在SQL查询中if/then循环效率低下

Pow*_*ser 2 sql sql-server sql-server-2008

我想清理始终使用Management Studio手动运行的SQL查询的结果.但我的if/then循环比单个元素花费的时间长得多.

目前,此Select语句立即运行(少于1秒)并且通常为空:

Select * from A join B on A.id=B.id
Run Code Online (Sandbox Code Playgroud)

如果没有结果,我想显示一条消息而不是空结果集(这是更大的多部分查询的一部分,因此清晰度会有所帮助).我改成了这个:

If (Select count(*) from A join B on A.id=B.id)>0
begin
    Select * from A join B on A.id=B.id
end
else
    Select 'No Results'
Run Code Online (Sandbox Code Playgroud)

因为那里的两个Select语句都在附近运行(我检查过),所以我希望整个代码段在相同的时间内运行.相反,它需要EIGHT秒.为什么这花了这么长时间,有一个简单的方法吗?

Ran*_*ngh 5

使用 if exists

If exists (Select * from A join B on A.id=B.id)
begin
    Select * from A join B on A.id=B.id
end
else
    Select 'No Results'
Run Code Online (Sandbox Code Playgroud)

  • 你正在使用聚合函数计数(*)的结果,它将扫描整个表并计算需要时间的行数,但是如果**存在**它会在找到记录时中断 (3认同)