Mysql百万级分页优化技巧

在北方每当春回大地,丁香花便不甘寂寞,也会兴致匆匆竟相开放,把他那扑扑幽香……丁香花色繁多有紫色,红色,白色等在没有梅雨的六月里散发着香水般芳菲的气息。天坛公园有个丁香林,置身其中,人真会有些要被花香熏晕的感觉多么忧郁的花。多么娇嫩的花。院子里栽满丁香花。开满紫色美丽的鲜花。丁香花小,一簇一簇的,有白有紫,路边的丁香花已孕育花苞,树下围了不少人指着花苞吵吵嚷嚷,别着急呀,只等春雷一响就会竞相绽放。

普通分页

  数据分页在网页中十分多见,分页一般都是limit start,offset,然后根据页码page计算start

select * from user limit 1,20

   这种分页在几十万的时候分页效率就会比较低了,MySQL需要从头开始一直往后计算,这样大大影响效率

SELECT * from user limit 100001,20; //time 0.151s
explain SELECT * from user limit 100001,20;

  我们可以用explain分析下语句,没有用到任何索引,MySQL执行的行数是16W+,于是我们可以想用到索引去实现分页

   优化分页

   使用主键索引来优化数据分页

select * from user where id>(select id from user where id>=100000 limit 1) limit 20; //time 0.003s

  使用explain分析语句,MySQL这次扫描的行数是8W+,时间也大大缩短。

 explain select * from user where id>(select id from user where id>=100000 limit 1) limit 20; 

  总结

  在数据量比较大的时候,我们尽量去利用索引来优化语句。上面的优化方法如果id不是主键索引,查询效率比第一种还要低点。我们可以先使用explain来分析语句,查看语句的执行顺序和执行性能。

补充:mysql中百万级别分页查询性能优化

前提条件:

1.表的唯一索引

2.百万级数据

SQL语句:

select
     c.*
     FROM
  (
  SELECT
   a.logid
  FROM
   tableA a
  where 1 = 1
     <#if phone?exists&& phone!=""> 
      AND a.phone like "%":phone"%" 
     </#if>
   ORDER BY
    a.create_time DESC
   limit :startIndex,:maxCount
  ) b,tableA c
  where 1 = 1 AND b.logid = c.logid

其中:

1:startIndex:表示查找数据的开始位置

2:maxCount:表示每页显示数据个数

3:a.create_time DESC:降序排列,需要在create_time建立索引

4:limiit放在里面,而不要放在查询的外面,这样效率提升很多

5:logid:唯一索引

以上就是Mysql百万级分页优化技巧。一个人,无论经历怎样的风雨,有过怎样的生活,奋进过,就是成功;不悔过,就是值得。人的价值不在于身价,而在于为他人带去正能量的价值;生命的意义不在于拥有的财富,而在于活着的真实。更多关于Mysql百万级分页优化技巧请关注haodaima.com其它相关文章!

您可能有感兴趣的文章
centos7 mysql5.7主从同步配置

centos7安装MySQL教程

达梦数据库DM8表空间管理之删除表空间

达梦数据库DM8表空间管理之创建表空间

国产达梦数据库常用SQL语句(上)