Mysql百万级分页优化技巧

 更新时间:2016年12月28日 08:41:23   投稿:mrr  
这篇文章主要介绍了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错误处理之ERROR 1665 (HY000)

    mysql错误处理之ERROR 1665 (HY000)

    最近一直在mysql的各个版本直接徘徊,这中间遇到了各种各样的错误,将已经处理完毕的几个错误整理了一下,分享给大家,这次我们来看看错误提示 ERROR 1665 (HY000)
    2014-07-07
  • 老生常谈MYSQL模式匹配 REGEXP和like的用法

    老生常谈MYSQL模式匹配 REGEXP和like的用法

    下面小编就为大家带来一篇老生常谈MYSQL模式匹配 REGEXP和like的用法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL分区表的最佳实践指南

    MySQL分区表的最佳实践指南

    这篇文章主要给大家介绍了关于MySQL分区表的最佳实践指南,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • MySQL 错误处理例子[译]

    MySQL 错误处理例子[译]

    MySQL 错误处理例子,国外人写的,大家可以参考下。
    2009-10-10
  • CentOS 6.5安装mysql5.7教程

    CentOS 6.5安装mysql5.7教程

    这篇文章主要为大家详细介绍了CentOS 6.5安装mysql5.7教程,包括mysal旧版本的卸载、新版本的升级,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • MySQL覆盖索引和索引跳跃扫描方式

    MySQL覆盖索引和索引跳跃扫描方式

    这篇文章主要介绍了MySQL覆盖索引和索引跳跃扫描方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • centos下mysql主从复制设置详解

    centos下mysql主从复制设置详解

    centos5.4下mysql主从复制步骤详解,大家参考使用吧
    2013-12-12
  • 分享下mysql各个主要版本之间的差异

    分享下mysql各个主要版本之间的差异

    因为mysql的版本较多,而且又被oracle公司收购,所有很多朋友不是很清楚各个版本的区别,这里简单介绍下,方便需要的朋友
    2013-06-06
  • Mysql事项,视图,函数,触发器命令(详解)

    Mysql事项,视图,函数,触发器命令(详解)

    下面小编就为大家带来一篇Mysql事项,视图,函数,触发器命令(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • MySQL如何处理InnoDB并发事务中的间隙锁死锁

    MySQL如何处理InnoDB并发事务中的间隙锁死锁

    这篇文章主要为大家介绍了MySQL如何处理InnoDB并发事务中的间隙锁死锁,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论