如何从 nvarchar SQL Server 2008 检查 nvarchar 值

发布于 2024-12-26 15:02:08 字数 453 浏览 0 评论 0原文

这是我的临时表:

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)

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

请帮我看看如何消除这个问题。

提前致谢。

This is my temporary table :

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)

Here Phone datatype is nvarchar(10) in database.

Problem : when I am going to select value it is taking too much time.

Please help me out how to remove this problem.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

原野 2025-01-02 15:02:08

我认为这会产生与您相同的输出。

select * 
from #tmpRecentTxns 
where #tmpRecentTxns.SerialID 
  not in (select Phone 
          from ApplicationVariables 
          where vardatetime >= dateadd(minute, -300, getdate()))

它将允许您使用 vardatetime 上的索引。

I think this will give the same output as you have.

select * 
from #tmpRecentTxns 
where #tmpRecentTxns.SerialID 
  not in (select Phone 
          from ApplicationVariables 
          where vardatetime >= dateadd(minute, -300, getdate()))

It will allow you to use an index on vardatetime.

转身泪倾城 2025-01-02 15:02:08

我不认为您的 Phone 类型为 NVARCHAR(10) 是性能不佳的原因。

首先,您应该确保您的 ApplicationVariables 表(包括 Phone 列)中的 vardatetime 列有索引。

CREATE INDEX IX_AppVar_VarDateTime
ON dbo.ApplicationVariables(vardatetime) INCLUDE(Phone)

其次,您应该更改查询以便可以使用该索引:

SELECT distinct Phone 
      FROM ApplicationVariables 
      WHERE vardatetime >= DATEADD(MINUTE, -300, GETDATE())

另外:我建议对 DATEDADDDATEDIFF 使用 MINUTE 说明符- 更清楚你想要做什么。

I don't think the fact your Phone is of type NVARCHAR(10) is the reason for poor performance.

First of all, you should make sure you have an index on the vardatetime column in your ApplicationVariables table (including the Phone column).

CREATE INDEX IX_AppVar_VarDateTime
ON dbo.ApplicationVariables(vardatetime) INCLUDE(Phone)

Second, you should change the query so that this index can be used:

SELECT distinct Phone 
      FROM ApplicationVariables 
      WHERE vardatetime >= DATEADD(MINUTE, -300, GETDATE())

Also: I would recommend to use the MINUTE specifier for DATEDADD or DATEDIFF - much clearer what you're trying to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文