【发布时间】:2018-10-24 15:07:47
【问题描述】:
我有一个结构如下的表:
CREATE TABLE [dbo].[User]
(
[Id] [INT] IDENTITY(1,1) NOT NULL,
[CountryCode] [NVARCHAR](2) NOT NULL DEFAULT (N'GB'),
[CreationDate] [DATETIME2](7) NOT NULL,
[Email] [NVARCHAR](256) NULL,
[EmailConfirmed] [BIT] NOT NULL,
[FirstName] [NVARCHAR](MAX) NOT NULL,
[LastName] [NVARCHAR](MAX) NOT NULL,
[LastSignIn] [DATETIME2](7) NOT NULL,
[LockoutEnabled] [BIT] NOT NULL,
[LockoutEnd] [DATETIMEOFFSET](7) NULL,
[NormalizedEmail] [NVARCHAR](256) NULL,
[NormalizedUserName] [NVARCHAR](256) NULL,
[PasswordHash] [NVARCHAR](MAX) NULL,
[SecurityStamp] [NVARCHAR](MAX) NULL,
[TimeZone] [NVARCHAR](64) NOT NULL DEFAULT (N'Europe/London'),
[TwoFactorEnabled] [BIT] NOT NULL,
[UserName] [NVARCHAR](256) NULL,
[LastInfoUpdate] [DATETIME] NOT NULL
)
我在该表中有大约一百万行,我想将非聚集索引应用于[LastInfoUpdate] 列。
所以我使用这个命令创建了一个非聚集索引:
CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID1
ON [dbo].[TestUsers] (LastInfoUpdate)
INCLUDE(Email)
一旦我尝试运行这样的简单查询:
SELECT [LastInfoUpdate]
FROM [dbo].[TestUsers]
WHERE [LastInfoUpdate] >= GETUTCDATE()
我只是在时间上得到与没有索引相同的结果。根据带有 db 的 SQL Server Profiler 在使用索引时会进行索引搜索,与没有索引的情况相比,它只使用更少的 cpu 资源,但对我来说重要的是时间到了。几点一样?我做错了什么?
【问题讨论】:
-
这条语句返回多少行?
-
@RBarryYoung 大约百万美元
-
那么这就是为什么它需要相同的时间。几乎所有的时间都只是在50万行的数据传输时间。
-
猜你是对的。那么我怎样才能消除这个的执行时间呢?
-
请使用以下页面粘贴查询计划:brentozar.com/pastetheplan
标签: sql sql-server tsql indexing