【发布时间】:2016-01-12 10:25:09
【问题描述】:
我有一个在where 条件下具有以下功能的程序:
select col1,col2,col3...
from table1
where
(dbo.GetFilStatus(et.SgDate,et.Speed,(SELECT COUNT(J.JId) FROM tbl_Nt J
inner JOIN tbl_NAssign JN ON JN.NNo =J.NNo
inner JOIN dbo.tbl_CStatus JS ON JS.CStatusID=J.CStatusID
INNER JOIN dbo.tbl_SStatus ss ON ss.SStatusID=JS.SStatusID
WHERE JN.DriID=et.DriID AND ss.SStatusID !=9),et.IgStatus)
in (Select val from Split('A,B,C,D,E',',')))
)
getfilstatus status 包含以下代码:-
if (@ServerDatetime <= DATEADD(MI,-10, GETDATE()))
BEGIN
IF(@xIgStatus = 'ON')
BEGIN
set @FilStatus= 'NoSignal'
END
ELSE
BEGIN
set @FilStatus= 'Stopped'
end
End
else IF(@xIgStatus = 'ON')
Begin
if(@Speed>5)
begin
if(@JCount<=0)
set @FilStatus='Moving'
else
set @FilStatus='Working'
end
else
begin
set @FilStatus= 'Idle'
end
End
else
Begin
set @FilStatus= 'Stopped'
end
RETURN @FilStatus
GetFilStatus 总是返回超过 10000 条记录。有时它超过 100000。它减慢了查询的最终输出。目前返回输出需要超过 2 分钟。
我正在寻找可以提高查询性能的任何其他选项或任何其他技巧,并且可以在几秒钟内获得输出。
有什么建议?有什么想法吗?
【问题讨论】:
-
Put (Select val from Split('A,B,C,D,E',',')) output in a Temp Table ..
-
从该常量 split() 表达式预派生一个表将是一个起点
-
您在哪个数据库上工作?
-
我正在使用 sql server 2008
-
更多推荐,功能
dbo.GetFilStatus的内容需要分享。
标签: sql sql-server-2008