96SEO 2026-08-14 05:08 38
在做列表接口时很多人先写出这句:
SELECT id。title,created_at
FROM article
ORDER BY created_at DESC
LIMIT?,,;
数据少的时候没毛病。数据一多,使用者偶尔会在第二页看到第一页的记录。或者有一条怎么翻都翻不到。怎么说呢,

这事经常被一句“深分页慢”带过去。其实是两个不同的坑:排序不稳定,还有翻页期间数据发生了变化。只调整 OFFSET 的扫描量,修不好前一个;老实说,只在排序后补主键,也修不好后一个。其实,
假设文章表里有三条数据的 created_at 都是同一时间。SQL 只要求按时间倒序,并没有规定这三条内部怎么排。
MySQL 的官方手册写得很直白:如果多行的 ORDER BY 列值相同,服务端可以按任意顺序返回它们;执行计划变化时这个顺序也可能变化。LIMIT 本身就可能影响执行计划。
这不是数据库“偶尔抽风”。不过,查询写出来的顺序本来就不完整。
先把排序补成唯一的:
SELECT id。title,created_at
FROM article
ORDER BY created_at DESC,id DESC
LIMIT?,,;
只要 id 唯一,任何两行都能分出先后。说起来,这里还有个小细节:两个字段必须保持同一套方向。时间倒序、同一时间下 id 也倒序,后面的游标条件才能原样对上。
第一页刚查完。顺序是:
1 | 2024-08-13 10:00:00 | ...
2 | 2024-08-13 09:58:00 | ...
3 | 2024-08-13 09:55:00 | ...
...
页面大小为 10 条,客户端拿到了前十条。
这时新文章插到最前面。第二页继续执行 LIMIT + OFFSET 时数据库看到的顺序已经成了:
0 | 2024-08-13 10:01:00 | ... -- 新增
1 | 2024-08-13 10:00:00 | ... -- 原第一页第一条
2 | 2024-08-13 09:58:00 | ...
...
跳过前两行以后第二页返回第3~12 条,其中原第一页第一条被重复出现。 删除或更新排序字段时一样可能漏行。
第一页仍然这样查:
SELECT id。title,created_at
FROM article
ORDER BY created_at DESC,id DESC
LIMIT?,说起来,
返回数据时把最终一条的 created_at 和 id 一起交给客户端。例如最终一条是:
created_at = '2024-08-13 09:55:00'
id = 42
下一页从这个位置之后继续:
SELECT id。title,created_at
FROM article
WHERE
OR
ORDER BY created_at DESC,id DESC
LIMIT?,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback