我尝试在我的应用中实现反向分页。数据来自一个大型的NoSQL数据库,如果我以琐碎的方式进行分页,那么我看到我跳到的更多页面,我到达那里的时间越多。为了提高性能,我计划使用只存储索引的MySQL表。我想从MySQL - 尽可能快地找到页面的起始索引。在具有300万行的表上,这种方法需要将近3秒来获取和索引:
SELECT MIN(id) FROM index_77635_ ORDER BY id DESC LIMIT $large_skip_number
如您所见,我尝试找到索引最少的行,以便跳转到之前添加的行。可能有更好的方法来实现这项任务。
修改
正确的查询效果非常好(=相对较快,或者至少比纯Mongo快),结果证明是这样的:
SELECT a.id FROM index_77635_ a
INNER JOIN (
SELECT MAX(id) AS id FROM (
SELECT id FROM index_77635_ ORDER BY id DESC LIMIT $skip,$limit
) t
) b ON a.id = b.id
在这种情况下,我尝试找到起始(即后向分页的最大值)索引,然后在mongo中查询数据的chucnk直到此索引。