我有桌子
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/