2011-01-06 87 views
2
select Item 
into #transferTheseItems 
from IDTable where id = @myCondition 

if exists (select 1 from #transferTheseItems) 
/* 
insert this huge data to a remote database over linked server 
*/ 

虽然temp中没有记录,但查询需要太长时间才能执行。在sql中优化条件语句

我也试过

if not exists (select 1 from #transferTheseItems) 
return 

,但什么都没有改变。

我认为sql服务器试图分析它永远不会执行的部分。

有没有办法跳过这个?

+0

你确定需要时间的东西不是SELECT INTO吗? – erikkallen 2011-01-06 11:36:14

回答

1

可能是它帮助你:

select Item 
into #transferTheseItems 
from IDTable where id = @myCondition 

IF @@ROWCOUNT > 0 
    .... 
ELSE 
    .... 
0

最后我意识到;

试试这个

if 1 = 0 
select * from a 
join b on a.ID = b.ID 
join c on c.ID = b.ID 

对于第一次执行查询需要时间来执行,即使你的复杂的查询将不会被执行。因为sql生成一个“执行计划”。

再次运行它,你会发现它几乎没有时间。因为sql server保存了该查询的执行计划。

0

我在想,如果perhps你打算在IF块中有多个语句,并且忘记使用BEGIN和END来将它们保留在IF块中。即使对于创建执行计划的大型查询,也不应花费很长时间,但查询的运行通常需要大部分时间。但是,使用条件处理时,只有if后面的第一个语句是IF的一部分,除非您使用BEGIN和END块进行了不同的指定。即使我打算只在IF中使用一条语句,我仍然使用BEGIN和END来维护它,因为它是一个微妙的错误,难以发现只是扫描代码。