理论上,他们将使用相同的计划并几乎同时运行。
在实践中,
SELECT TOP 1 Id FROM Table1 ORDER BY Id DESC
更有可能使用PRIMARY KEY INDEX
.
此外,如果您决定选择其他列以及id
.
一个实际的计划MAX()
说:
SELECT <- AGGREGATE <- TOP <- CLUSTERED INDEX SCAN
,而计划TOP 1
说:
SELECT <- TOP <- CLUSTERED INDEX SCAN
,即aggregate
省略。
聚合实际上不会在这里做任何事情,因为只有一行。
PS如前所述@Mehrdad Afshari
,@John Sansom
在非索引字段MAX
上稍快(当然不是20
优化器所说的时间):
-- 18,874,368 行
设置语言英语
设置统计时间
设置统计 IO 开启
打印“最大”
从主服务器中选择 MAX(id)
打印“前 1 名”
SELECT TOP 1 id FROM master ORDER BY id DESC
打印“最大”
从主服务器中选择 MAX(id)
打印“前 1 名”
SELECT TOP 1 id FROM master ORDER BY id DESC
打印“最大”
从主服务器中选择 MAX(id)
打印“前 1 名”
SELECT TOP 1 id FROM master ORDER BY id DESC
打印“最大”
从主服务器中选择 MAX(id)
打印“前 1 名”
SELECT TOP 1 id FROM master ORDER BY id DESC
打印“最大”
从主服务器中选择 MAX(id)
打印“前 1 名”
SELECT TOP 1 id FROM master ORDER BY id DESC
将语言设置更改为 us_english。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
最大限度
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过的时间 = 20 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 447,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 5452 毫秒,经过时间 = 2766 毫秒。
前1名
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 2,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 6813 毫秒,经过时间 = 3449 毫秒。
最大限度
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 44,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 5359 毫秒,经过时间 = 2714 毫秒。
前1名
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 6766 毫秒,经过时间 = 3379 毫秒。
最大限度
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 5406 毫秒,经过时间 = 2726 毫秒。
前1名
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 6780 毫秒,经过时间 = 3415 毫秒。
最大限度
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 85,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 5392 毫秒,经过时间 = 2709 毫秒。
前1名
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 10,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 6766 毫秒,经过时间 = 3387 毫秒。
最大限度
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 5374 毫秒,经过时间 = 2708 毫秒。
前1名
SQL Server 执行时间:
CPU 时间 = 0 毫秒,经过时间 = 1 毫秒。
(строкобработано: 1)
表'主'。扫描计数 3,逻辑读取 32655,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
SQL Server 执行时间:
CPU 时间 = 6797 毫秒,经过时间 = 3494 毫秒。