优化

2013-03-28 62 views
0

我已经写了小的数据库这个代码,但知道数据库的大小增加了代码,它显示在优化它 下面超时error.plz帮助代码: -优化

IF OBJECT_ID('Temp_expo') is not null 
begin 
    drop table Temp_expo 
end 

set @query3 = 'SELECT SPCT_ID_REL_LOW,SPCT_ID_REL_HIGH,ROW_NUMBER() over (order by PDBC_PFX) as TempId 

INTO Temp_expo 
FROM ['+ @FCTServer +'].['[email protected]+'].dbo.CMC_SPCT_SUPP_CONV 
where SPCT_ID_REL_LOW <> '''' and SPCT_ID_REL_HIGH <> ''''' 

exec (@query3) 

Select @minCount= min(TempId) from Temp_expo 
Select @maxCount= max(TempId) from Temp_expo 

create table #ICD9SPCT 
(
    ICD9Code varchar(200) 
} 

while @minCount<[email protected] 
begin 
    select @low=SPCT_ID_REL_LOW,@high=SPCT_ID_REL_HIGH 
    from Temp_expo 
    where [email protected] 
    group by SPCT_ID_REL_LOW,SPCT_ID_REL_HIGH 

    set @loworder = (select ISNULL(OrderId,0) from FCT_ICD9_Diag_ORDER where [email protected]) 
    set @highorder = (select ISNULL(OrderId,0) from FCT_ICD9_Diag_ORDER where [email protected]) 


    insert into #ICD9SPCT 
    select ICD9 from FCT_ICD9_Diag_ORDER ordert 
    left join #ICD9SPCT icdorder on ordert.ICD9 = icdorder.ICD9Code 
    where OrderId between @loworder and @highorder and icdorder.ICD9Code is null 

    set @minCount = @minCount+1; 
end 
+1

由于没有“我们”可以使用的代码,因此很难帮助您。如果你可以使用像http://sqlfiddle.com/这样的东西作为一个工作示例,它会有很大的帮助 - 作为一个快速拍摄,我会检查你是否有适当索引的引用字段。 – 2013-03-28 09:40:26

+0

我必须从表中选择SPCT_ID_REL_LOW,SPCT_ID_REL_HIGH值并将它们保存在临时表中并使用它。这个LOW,HIGH是范围值,大约LAKHS的数量。有没有什么办法,我可以直接使用它的单个select语句而不使用临时表 – umm 2013-03-28 10:30:02

回答

0

如果这是对于SQL SERVER,您可以尝试以下一些基本提示: USE:WITH(NOLOCK)在每次选择后使用。 即 选择ICD9从(NOLOCK) 左连接上ordert.ICD9 = icdorder.ICD9Code 其中@loworder和@highorder和icdorder.ICD9Code之间的OrderId为空#ICD9SPCT icdorder FCT_ICD9_Diag_ORDER ordert

您也可以尝试改变你的临时表变量表,仅通过改变#为@,如:

创建表@ ICD9SPCT ( ICD9Code VARCHAR(200) }

你,依旧是使用while循环可能原始你的问题的原因。