如何优化MIN + ORDER + LIMIT

时间:2015-01-23 19:07:25

标签: mysql sql performance

我尝试在我的应用中实现反向分页。数据来自一个大型的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直到此索引。

0 个答案:

没有答案