如何从nvarchar SQL Server 2008检查nvarchar值

时间:2012-01-13 07:11:18

标签: sql-server-2008

这是我的临时表:

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)

问题:当我要选择值时,需要花费太多时间。

请帮我解决如何解决此问题。

提前致谢。

2 个答案:

答案 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())

另外:我建议您使用MINUTEDATEDADD的{​​{1}}说明符 - 更清楚您要做的事情。