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

时间:2015-08-05 20:05:09

标签: sql sql-server sql-server-2008

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

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

Select * from A join B on A.id=B.id

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

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'

由于那里的两个Select语句都在附近运行(我检查过),我希望整个代码段在相同的时间内运行。相反,它需要EIGHT秒。为什么这需要更长的时间并且有一个简单的方法呢?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

我建议在查询后检查结果计数。这样做的缺点是在输出中为您提供了第二个结果集,但它具有两次不查询数据的优点。

Select * from A join B on A.id=B.id
IF @@ROWCOUNT = 0 Select 'No Results'