使用参数使SQL运行非常慢

时间:2014-02-25 09:38:25

标签: sql sql-server-2008

我想获取位于美国的员工的帐户信息。如果员工没有位置信息,则表示员工居住在亚洲。

exec sp_executesql N'select top 1 * from Account where /
     exists( select * from employee where Acc_id=emp_id and @emp_loc=''Asia'') /
     or (not exists (select * from emplyee where Acc_id=emp_id ) and /
     @emp_loc=''Asia'')'N' @emp_loc varchar(10)',@emp_loc='America'

上述查询执行时间超过5分钟。

如果我对参数进行硬编码。它只需要1秒钟。

SELECT top 1 * 
FROM Account
WHERE exists(
              SELECT * 
              FROM employee 
              WHERE Acc_id=emp_id 
              AND 'America'='Asia'
            )
       OR (not exists(
                       SELECT * 
                       FROM employee
                       WHERE Acc_id=emp_id
                     ) 
          AND 'America'='Asia'
          ) 

为什么使用参数让性能非常慢?

1 个答案:

答案 0 :(得分:0)

我认为条件过滤器是where Acc_id=emp_id and emp_loc=@emp_loc 试试吧!! !!