这是我的临时表:
CREATE TABLE #tmpRecentTxns(SerialID nvarchar(50) null,TranDate datetime2 null)
select *
from #tmpRecentTxns
where #tmpRecentTxns.SerialID NOT IN
(SELECT distinct Phone
FROM ApplicationVariables
WHERE datediff(n, vardatetime, getdate()) <= 300)
数据库中Phone
数据类型为nvarchar(10)
。
问题:当我要选择值时,需要花费太多时间。
请帮我解决如何解决此问题。
提前致谢。
答案 0 :(得分:2)
我认为这会产生与你相同的输出。
select *
from #tmpRecentTxns
where #tmpRecentTxns.SerialID
not in (select Phone
from ApplicationVariables
where vardatetime >= dateadd(minute, -300, getdate()))
它允许您在vardatetime
上使用索引。
答案 1 :(得分:1)
我认为Phone
属于NVARCHAR(10)
类型的事实并不是导致表现不佳的原因。
首先,您应该确保在vardatetime
表格中的ApplicationVariables
列上有一个索引(包括Phone
列)。
CREATE INDEX IX_AppVar_VarDateTime
ON dbo.ApplicationVariables(vardatetime) INCLUDE(Phone)
其次,您应该更改查询以便可以使用此索引:
SELECT distinct Phone
FROM ApplicationVariables
WHERE vardatetime >= DATEADD(MINUTE, -300, GETDATE())
另外:我建议您使用MINUTE
或DATEDADD
的{{1}}说明符 - 更清楚您要做的事情。