这个postgres分页sql的性能可以改善吗?

时间:2019-06-03 20:55:34

标签: sql postgresql pagination paging

我有一个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

我不确定这种方法的效果如何,并想知道上述约束是否可以进行更改以改进它?

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是先这样查询:

SELECT * FROM cars 
ORDER BY id
LIMIT 20;

然后记住 last id

使用

检索下一页

SELECT * FROM cars 
WHERE id > [the id you remembered]
ORDER BY id
LIMIT 20;

以此类推。

这样一来,您无法获得结果的总数,但是却可以提高效率。

真的需要确切的总数吗?如果近似值足够,请尝试在this blog post末尾提出想法。