MySQL如何优化分页查询

打卡(2020-05-02)

MySQL如何优化分页查询

一般分页查询是创建覆盖索引能够比较好的提升性能。

  1. 第一种优化思路

在索引上完成分页操作,最后根据主键关联回原表查询所需要的其他列内容

    // 未优化之前的sql,这个相当于是全表扫描
    select film_id,description from film order by title limit 50,5;
    
    // 优化之后的sql,这个就是使用主键索引了
    select  a.film_id,a.description from film a inner join (select film_id from film order by title limit 50,5) b on a.film_id = b.film_id;
    
    // 通过主键关联查询可以使用expain查看优化结果type已经不是使用all而是eq_ref/index

总结:这种方式就是让MySQL扫描尽可能少的页面来提高分页的效率!

  1. 第二种优化思路

就是将limit查询换成某一个位置查询

    // 优化前的sql
    select * from payment order by rental_id desc limit 410,10;
    
    // 优化后的sql
    // 说明:这种优化方式就是增加一个参数 last_page_record,用来记录上一次最后一行的rental_id
    
    select * from payment where rental_id>15640 order by rental_id desc limit 10;

总结:这样把limit m,n转换成limit n的查询,只适合排序字段不会出现重复值得特定环境,这样的操作可以减少翻页的压力,如果排序出现大量的重复值,使用这个优化方式,那么会出现分页结果错乱,而不适合使用第二种的优化思路!

你可能感兴趣的:(MySQL)