首页 > 解决方案 > smalldatetime 列上的索引

问题描述

我有一个包含以下列的表格

[ID] [int] IDENTITY(1,1) NOT NULL,
[Timestamp] [datetime] NOT NULL,
[Datestamp] [smalldatetime] NOT NULL,
[Message] [nvarchar](max) NULL

ID 列上有聚集索引和 PK。
Datestamp 上也有非聚集索引。

Datastamp 列包含格式为 2021-10-04 00:00:00 的日期

我读到的是 Datestamp 列上的索引将优化日期过滤。实际上,这是选择按日期过滤的 ID 时的查询计划。

select ID
from [Log]
where [Datestamp] > '2020-01-01' and [Datestamp] < '2021-09-01'
order by datestamp 

选择 ID 并过滤日期戳

但是,当我在 Datestamp 上选择 Message 和 filter 时,我可以看到查询计划现在涉及 Sort 运算符,这会使该查询无法执行。此外,不再使用 Datestamp 上的非聚集索引。

select Message
from [Log]
where [Datestamp] > '2020-01-01' and [Datestamp] < '2021-09-01'
order by datestamp 

选择消息并过滤日期戳

知道为什么会这样吗?
为什么选择 Message 列时使用非聚集索引?

标签: sql-server

解决方案


推荐阅读