小编Adr*_*ger的帖子

为什么从组合索引DESC中选择top 1也用于按月分区而不选择top值?

我们有非常大的数据库表,我需要选择最大 id 的值。鉴于表大小 SELECT MAX(id) FROM tableA 不会表现得足够好。

表定义(为了清楚起见省略了列)

CREATE TABLE [dbo].[TableA](
    [id] [numeric](19, 0) NOT NULL,
    [timeSampled] [datetime] NOT NULL
 CONSTRAINT [PK_TableA] PRIMARY KEY NONCLUSTERED 
(
    [id] DESC,
    [timeSampled] DESC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
Run Code Online (Sandbox Code Playgroud)

该表在 timesampled 上按月分区,并且因为我们将分区切换到另一个表以存档数据,timeSampled 列必须包含在主键中。

所以,PK是

[id] DESC,
[timeSampled] DESC
Run Code Online (Sandbox Code Playgroud)

该表包含 2013 年 5 月和 2013 年 6 月的行,id 以日期顺序递增(即最大 id 为 6 月)

当我从表中选择前 1 个 id 时,如下所示

SELECT top 1 id …
Run Code Online (Sandbox Code Playgroud)

index sql-server

2
推荐指数
1
解决办法
1314
查看次数

标签 统计

index ×1

sql-server ×1