一般分页查询时,通过创建覆盖索引能够比较好地提高性能。一个常见又非常头疼的问题就是 limit 1000000 , 10,此时需要MySQL排序前1000010 记录,仅仅返回1000000 - 1000010 的记录,其他记录丢弃,查询排序的代价非常大 。
示例:
explain select * from tb_sku limit 1000000 , 10 ;
执行查询耗时:
优化思路一:在索引上完成排序分页操作,最后根据主键关联回原表查询所需要的其他列内容。
示例:
explain select * from tb_sku s , (select id from tb_sku order by id limit 1000000 , 10 ) t where t.id = s.id ;
执行查询耗时:
优化思路二:该方案适用于主键自增的表,可以把Limit 查询转换成某个位置的查询 。
示例:
explain select * from tb_sku where id > 1000000 limit 10 ;
执行查询耗时:
精品推荐
发布者:admin,如若转载,请注明出处:https://ai1024.vip/43238.html