【发布时间】:2023-03-28 03:25:01
【问题描述】:
我的生产表包含超过一百万条记录。要求分页查询通过 OFFSET 和 LIMIT 参数检索记录(类似于 MySql 的 LIMIT 子句),而不对结果集进行排序,就像行的自然顺序在表扫描中一样,因为“ORDER BY”会产生不可接受的性能影响,包括传统技术 ROW_NUMBER() OVER (ORDER BY ...) 中使用的“ORDER BY”子句。
有哪位专家可以提供解决这个问题的方法吗?对结果集没有任何排序的分页记录。
例如
Create table RandomRecords(int id, datetime recordDate)
----
select * from RandomRecords
34, '1/1/2009'
123, '8/1/2008'
11, '2/23/2008'
10, '3/2/2008'
4, '2/5/2009'
78, '1/1/2008'
55, '5/2/2008'
6666, '2/12/2009'
....
one million rows
-----
paging query with @Offset = 3 and @limit=4 generates
11, '2/23/2008'
10, '3/2/2008'
4, '2/5/2009'
78, '1/1/2008'
【问题讨论】:
-
你能对你的表结构做更多解释吗?似乎您的 RandomRecords 表是您的情况的过于简单化的示例。
标签: sql sql-server paging