【发布时间】:2017-06-04 02:23:03
【问题描述】:
我收到了以下两个查询。一个快一个慢。
该表在Id 列上有一个聚集索引。
-- Slow, uses clustered index scan reading 100100 rows
SELECT *
FROM [dbo].[Foo]
ORDER BY Id
OFFSET 100000 ROWS FETCH FIRST 100 ROWS ONLY
-- Fast, uses clustered index seek reading 100 rows
SELECT TOP 100 *
FROM [dbo].[Foo]
WHERE Id > 100000
ORDER BY Id
这些计划是相同的,除了一个使用扫描另一个搜索。
谁能解释OFFSET 的工作原理或者这只是它的工作原理吗?
表格非常宽,有几个NVARCHAR(100-200) 和一个NVARCHAR(2500) 列。
【问题讨论】:
-
注意:这些查询不一样!
-
OFFSET 必须扫描以计算行数,ID>.. 不能。他们可能会给出不同的结果
标签: sql sql-server pagination