首页 > 解决方案 > SQL - 在大表上选择最后一行的更快且不那么贪婪的方法是什么?

问题描述

我有一个大的消息表。为了提高性能和页面加载时间,我想要做的是获取最后发布的消息,比如最后的 20 条消息。

当用户向下滚动时,由于 JS,之前的 20 条消息将添加到 DOM。

因此,如果我总共有 40 条消息,则会显示 40 到 20 条消息。用户将向下滚动,然后将 20 到 0 条消息添加到 DOM。

问题是,如果我存储加载消息的最低 id 并使用如下查询:

SELECT * FROM messages ORDER BY id DESC LIMIT 20,20 (<= is the lowest offset of loaded messages)

我读到 MySQL 将首先获取表的每一行,然后只返回我想要的条目,如果我的消息表包含 500 000 个条目,我想这将需要相当长的时间。

最有效和更快的方法是什么?

标签: mysqlperformance

解决方案


所以基本上你想要做的就是所谓的“延迟加载”,因为它只会在需要时加载记录。

最好的方法是发送加载记录的最后一个 id。假设它是 id 1988。

然后你可以像这样查询

SELECT * FROM messages WHERE id < 1988 ORDER BY id DESC LIMIT 20

下一个查询可能看起来像

SELECT * FROM messages WHERE id < 1968 ORDER BY id DESC LIMIT 20

等等


推荐阅读