sql优化-分页查询性能优化(orderBy + limit)

本文章来给大家介绍一篇关于mysql中分页查询中使用order by 和limit查询变慢解决办法,因为在mysql分页利用limit来操作,同时排序也需要使用了order by ,所以经常会两者同是使用到,但是如果数据量大的话就会碰到查询很慢很慢,下面我来给大家介绍解决办法。

一条简单分页的sql查询语句,耗时2.6S 

经排查导致变慢的原因: 1.limit + order by导致  2 .order by 未使用到正确的联合索引  3. select 的内容过大

(1) 如果我们先去掉limit

(2)如果我们先去掉order by

(3) 如果我们去掉content

        

优化1.0

首先我们可以在索引方面处理看看

        未正确的使用到索引,出现这个问题的原因在于 MySQL 每次查询只能使用一个索引, 而 SQL 语句 WHERE 条件和 ORDER BY 的条件不一样, 索引没建好的话

 如果必须要使用id 作为order by 时

        1.添加新索引 

        

 

        2. 强制使用指定索引  force  index(索引名)

 

 

2.0 优化

        如果不想加索引,可以在sql语句上做处理

优化前  :

 SELECT `id`,`title`,`content`FROM     `bw_book_chapter` WHERE (`book_id` = 3133) AND (`bw_book_chapter`.`deleted_at` = 0) ORDER BY `id` limit 2

优化后: 

        SELECT  `id`, `title`,`content` FROM bw_book_chapter INNER JOIN ( SELECT `id` FROM `bw_book_chapter`  WHERE (`book_id`=3133) AND (`bw_book_chapter`.`deleted_at`=0) ORDER BY `id` limit 2 )as a USING (id)

mysql执行顺序 from > where >group by >having  >select  >order by  >limit  

分别在于:  

            优化前  的SQL需要更多I/O浪费,因为先读索引,再读数据,然后抛弃无需的行

             优化后的SQL(子查询那条)只读索引(Cover index)就可以了,然后通过ID读取需要的列.

对mysql服务器优化也可以提升性能了.


版权声明:本文为qq_29973167原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。