我们有非常大的数据库表,我需要选择最大 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)