我有桌子

Users (user_id integer, user_name string, scores integer)

那张表将包含160万条记录。有用户名和分数的索引
用户将输入他的名字,我应该从表中给他显示一页,按分数排序,这将包含他周围的其他用户。
我有两个问题:
第一:
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秒,如何改进呢?

最佳答案

偏移量本身会使查询变慢。
如果不需要纯sql并且可以使用编程语言来形成查询,为什么不考虑Paging Through Results?按用户id排序第二个查询,并限制20以满足分页需要,而不是使用偏移量。

关于postgresql - 优化选择中的大偏移量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22367095/

10-15 19:48