首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化代码

优化代码
EN

Stack Overflow用户
提问于 2013-03-28 17:35:45
回答 1查看 51关注 0票数 0

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

代码语言:javascript
复制
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 +'].['+@FCTDBName+'].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<=@maxCount 
begin
    select @low=SPCT_ID_REL_LOW,@high=SPCT_ID_REL_HIGH 
    from Temp_expo 
    where TempId=@minCount 
    group by SPCT_ID_REL_LOW,SPCT_ID_REL_HIGH

    set  @loworder = (select ISNULL(OrderId,0) from FCT_ICD9_Diag_ORDER where ICD9=@low)
    set  @highorder = (select ISNULL(OrderId,0) from FCT_ICD9_Diag_ORDER where ICD9=@high)


    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
EN

回答 1

Stack Overflow用户

发布于 2013-03-28 23:47:12

如果这是针对SQL SERVER,那么您可以尝试以下一些基本技巧:在每次使用select之后使用: WITH (NOLOCK)。即select ICD9 from loworder WITH (NOLOCK) left join #ICD9SPCT icdorder on ordert.ICD9 = icdorder.ICD9Code,其中@loworder和@highorder之间的OrderId和icdorder.ICD9Code为null

您还可以尝试将临时表更改为变量表,只需更改@ like的#即可:

create table @ICD9SPCT ( ICD9Code varchar(200) }

尽管如此,您正在使用的WHILE循环可能是问题的主要原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15678371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档