需要帮助加速SQL Server查询

时间:2015-10-08 14:34:31

标签: sql sql-server stored-procedures

我有一个存储过程,在内存中创建了很多临时表。我有以下查询,需要很长时间才能运行(7分钟)。

select 
  a.DEPT,
  a.DIV,
  a.PART,
convert(datetime,convert(varchar(2),datepart("mm",a.Release_Date))+'/1/'+ convert(varchar(4),datepart("yyyy",a.Release_Date)),101) as rptng_mnth
from @tmpReportData3 a
where not exists
(select distinct DEPT,DIV,PART from @tmpReportData4 b
where a.DEPT = b.DEPT and a.DIV = b.DIV and a.PART = b.PART)
order by rptng_mnth

有没有办法加快速度?

3 个答案:

答案 0 :(得分:1)

这是您的查询,从子查询中删除了不必要的select distinct

select a.DEPT, a.DIV, a.PART,
       convert(datetime,convert(varchar(2),datepart("mm",a.Release_Date))+'/1/'+ convert(varchar(4),datepart("yyyy",a.Release_Date)),101) as rptng_mnth
from @tmpReportData3 a
where not exists (select DEPT, DIV, PART
                  from @tmpReportData4 b
                  where a.DEPT = b.DEPT and a.DIV = b.DIV and a.PART = b.PART
                 )
order by rptng_mnth;

您的性能问题可能是由not exists引起的。使用left join编写查询可能会带来一些好处。但是,最简单的方法是从使用表变量切换到临时表#tmpReportData4。然后在临时表上添加一个索引:#tmpReportData4(dept, div, part)

答案 1 :(得分:1)

一个好的开始是将“不在”更改为左连接。

你也可以考虑使用“#”(而不是“@”)临时表,因为你可以索引#-tables。

您可以包含完整的存储过程吗?

jQuery(selector).parents().show();

答案 2 :(得分:0)

尝试重新创建sp,但没有使用任何临时表,没有使用游标..这对我有用。您也可以发布您的整个sp代码。 :)