【发布时间】:2019-10-19 10:13:51
【问题描述】:
我有一个 HTTP 客户端,它希望简单地发送查询字符串中的偏移量来处理分页,例如 http://foo.com/cars?offset=50。
作为响应,他们得到一个模型,其中包含项目总数和数据数组。 {"totalitemcount":100, "data":[{"id":1,"name":"Porsche"},{"id":2, "name":"Ferrari"}]}
我用来执行此操作的 SQL 如下:
select count(items.id) over() as totalitemcount, items.* from (
select * from cars
order by id
) as items
limit 20
offset 50
我不确定这种方法的性能如何,并且想知道上述限制是否可以进行更改以改进它?
【问题讨论】:
-
我不确定内部
ORDER BY是否会被外部SELECT考虑在内。 -
强烈建议避免使用
OFFSET进行分页,因为它需要扫描所有前面的记录并且根本没有性能。您应该改用id字段进行过滤/分页。看到这篇很棒的帖子:use-the-index-luke.com/sql/partial-results/fetch-next-page
标签: sql postgresql pagination paging