mysql - 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 个条目,我想这将需要相当长的时间。
最有效和更快的方法是什么?
解决方案
所以基本上你想要做的就是所谓的“延迟加载”,因为它只会在需要时加载记录。
最好的方法是发送加载记录的最后一个 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
等等
推荐阅读
- python - 如何在 Python 中通过基于消息传递的调用使用 Async / Await
- c++ - 为什么将结构传递给函数而不是单独的参数?
- javascript - 调试 node.js 时出现“断点已设置但尚未绑定”错误
- r - RStudio 中的交互式 Treemap d3tree - 使用 savewidget() 时没有图例
- r - RMarkdown 无法正确呈现
- android - getIdentifier() 返回无效的资源 ID
- jquery - @URL.Action 链接在引导下拉菜单中不可点击
- excel - 嵌套 IF 语句忽略空格 (3)
- reactjs - 一个组件正在更改一个不受控制的电子邮件类型的输入,以便在反应中控制
- c# - 如何在外部程序集中使用 Azurefunction 提供的 ILogger 进行日志记录