MySQL用LIMIT OFFSET查前10行越来越慢是因为OFFSET强制扫描跳过所有前面的行即使只取第1行OFFSET 1000000也要定位到第1000001行才开始取数据量大时比全表扫描还慢。MySQL用LIMIT OFFSET查前10行为什么越来越慢因为OFFSET会强制数据库扫描并跳过前面所有行哪怕你只要第1行OFFSET 1000000也会让MySQL定位到第1000001行才开始取——中间全白算。数据量一上百万LIMIT 10 OFFSET 1000000可能比全表扫描还慢。实操建议能不用OFFSET就不用尤其在分页深度超过几百页时如果只是要“前N行”直接用LIMIT N不加OFFSET——这是唯一真正高效的写法如果业务真需要翻页比如后台列表改用基于游标的分页用上一页最后一条的id或created_at做条件例如WHERE id 12345 ORDER BY id LIMIT 10确保排序字段有索引否则ORDER BY本身就会触发文件排序再加OFFSET等于雪上加霜PostgreSQL里用FETCH FIRST比LIMIT更规范吗语法上更标准SQL:2008但性能和LIMIT完全一致底层都走同样执行计划。区别只在语义清晰度和兼容性——FETCH FIRST 10 ROWS ONLY明确表达“只取前10行”而LIMIT 10是PostgreSQL/MySQL的扩展写法。实操建议新项目或跨数据库场景优先用FETCH FIRST 10 ROWS ONLY避免LIMIT在SQL Server、Oracle里不识别不要以为它能绕过OFFSET的性能问题——OFFSET 1000000 FETCH FIRST 10 ROWS ONLY照样慢如果用ORDER BY FETCH FIRST必须确认排序列已建索引否则Plan里会出现Sort节点且Rows Removed by Filter高得离谱SQL Server中TOP N和OFFSET FETCH的取舍TOP N是SQL Server原生语法快且稳定OFFSET FETCH是SQL:2012引入的通用分页方案但实现不如TOP轻量。两者在取“前N行”时结果一致但执行计划不同。 There’s An AI For That 全球领先的 AI 聚合器收集10,225个AI工具可用于超过2,548个任务。