星海

MySQL · 单选题 · 第 36 题

Java 后端开发面试 · 第 36 题

SELECT … ORDER BY id LIMIT 1000000, 10 很慢,比较有效的优化是?

  1. A只要把 innodb_buffer_pool_size 调大到足够大,深分页的问题就会被彻底解决
  2. B用上一页最后一条的 id 做条件(WHERE id > ? LIMIT 10),或先查主键再关联
  3. C把 LIMIT 1000000, 10 改写成 LIMIT 10 OFFSET 1000000,执行效率就会明显提高很多
  4. D去掉 ORDER BY 子句就能避免扫描前面的一百万行,同时还能保证结果顺序正确

答案

B B. 用上一页最后一条的 id 做条件(WHERE id > ? LIMIT 10),或先查主键再关联

解析

深分页慢,是因为 MySQL 要先读出并丢弃前一百万行,回表的代价尤其大。基于游标的分页可以直接从索引定位;延迟关联先在覆盖索引上拿到 10 个主键,再回表取整行。OFFSET 写法只是语法不同,执行计划一样;去掉 ORDER BY 后结果顺序没有保证。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。