这是我的问题,我有一个大约 5,000,000 行的 SQL Server 2016 表,它有一个聚集的列存储索引。
以下查询以毫秒为单位运行:
SELECT * FROM Table Extent1
WHERE ([Extent1].[CustomerIden] = '0070db55-6c30-415c-8146-20f43c870107')
AND ([Extent1].[StartTime] <= '2015-02-17 08:54:35')
ORDER BY [Extent1].[StartTime] DESC
在末尾添加“OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY”,例如:
SELECT * FROM Table Extent1
WHERE ([Extent1].[CustomerIden] = '0070db55-6c30-415c-8146-20f43c870107')
AND ([Extent1].[StartTime] <= '2015-02-17 08:54:35')
ORDER BY [Extent1].[StartTime] DESC
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY
需要几分钟才能运行,我们发现问题是查询没有返回 20 行,如果我们将查询更改为
SELECT * FROM Table Extent1
WHERE ([Extent1].[CustomerIden] = '0070db55-6c30-415c-8146-20f43c870107')
AND ([Extent1].[StartTime] <= '2015-02-17 08:54:35')
ORDER BY [Extent1].[StartTime] DESC
OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY
它再次以毫秒为单位执行。
关于如何克服这个问题而不必先进行计数以手动设置OFFSET
和FETCH NEXT
值的任何想法?