mysql 分页查询优化

136 阅读1分钟

mysql分页查询数据量较大时优化方案

select * from user where age = 10 limit 100000,20;

结果显示4.73s

SELECT a.* FROM USER a
INNER JOIN
    (SELECT id FROM USER WHERE age = 10 LIMIT 100000,20) b
ON a.id = b.id;

结果0.53s

原因分析:由于非聚簇索引的叶子节点上面存储的是主键的id,因此,如果select只查主键,那么就不需要根据主键id再到聚簇索引上面获取记录信息,而如果select需要查询除主键外的其它字段信息,就必须要到聚簇索引上面取记录信息。 limit是在查询结果基础上跳过多少条记录,也就是说,跳过多少条记录也是需要查询这些记录的信息的。如limit 10000,20,那么就需要10020次根据主键id到聚簇索引上面取记录信息,而select id就能减少这10020次查询,因为非聚簇索引上面存的就是主键id。前提是where后面的条件必须确保都是走索引,在全表扫描下,任何优化都是徒劳

blog.csdn.net/weixin_3979…