我有桌子
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秒,如何改进呢?
答案 0 :(得分:0)
偏移本身会使您的查询变慢。 如果您不需要纯SQL并且可以使用编程语言来形成查询,为什么不考虑Paging Through Results?通过user_id排序第二个查询,并限制20用于分页需求,而不是使用偏移量。