我有一个超文本传输协议客户端,希望简单地在查询字符串中发送一个偏移量来处理分页,例如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
我不确定这种方法的性能如何,我想知道在上面的限制下,是否可以做出改变来改善它?
发布于 2019-06-04 15:05:59
要做到这一点,最好的方法是首先像这样查询:
SELECT * FROM cars
ORDER BY id
LIMIT 20;
然后记住最后一个id
。
使用检索下一页
SELECT * FROM cars
WHERE id > [the id you remembered]
ORDER BY id
LIMIT 20;
诸若此类。
这样,你不会得到结果的总数,但你可以提高效率。
你真的需要确切的总数吗?如果一个近似值就足够了,那么在this blog post的末尾尝试一下这个想法。
https://stackoverflow.com/questions/56434436
复制相似问题