优化选择中的大偏移量

时间:2014-03-13 01:00:33

标签: postgresql pagination indexing limit offset

我有桌子

Users (user_id integer, user_name string, scores integer)

该表将包含1-6百万条记录。在用户名得分

上有索引

用户将输入他的名字,我应该向他显示该表中的一页,按分数排序,这将包含他在其他用户周围。

我在2个查询中执行此操作:

第一

select user_id from (
       select row_number() over (order by scores desc), 
              user_id 
       from users 
       where user_name="name" limit 1
)

第二

select * from users limit 20 offset The_User_Id/20+1

比我得到的页面,其他人包含我的用户。

但是当用户位于有数百万条记录的桌子中间时,我已经偏移了500000,那个工作很慢,大约1-2秒,如何改进呢?

1 个答案:

答案 0 :(得分:0)

偏移本身会使您的查询变慢。 如果您不需要纯SQL并且可以使用编程语言来形成查询,为什么不考虑Paging Through Results?通过user_id排序第二个查询,并限制20用于分页需求,而不是使用偏移量。