mysql使用limit分页优化方案

mysql使用limit分页优化方案一、测试实验 mysql分页直接用limit start, count分页语句: select * from product limit start, count 当起始页较小时,查询没有性能问题,…

一、测试实验

mysql分页直接用limit start, count分页语句:

 

select * from product limit start, count

代码100分

当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条),如下:

 

代码100分select * from product limit 10, 20 0.016秒
select * from product limit 100, 20 0.016秒
select * from product limit 1000, 20 0.047秒
select * from product limit 10000, 20 0.094秒

我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的,
那么我们把起始记录改为40w看下(也就是记录的一半左右)

 

select * from product limit 400000, 20 3.229秒

再看我们取最后一页记录的时间

 

代码100分select * from product limit 866613, 20 37.44秒

像这种分页最大的页码页显然这种时间是无法忍受的。

从中我们也能总结出两件事情:

  • limit语句的查询时间与起始记录的位置成正比。
  • mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

二、 对limit分页问题的性能优化方法

2.1 利用表的覆盖索引来加速分页查询

我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。

因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。

另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

在我们的例子中,我们知道id字段是主键,自然就包含了默认的主键索引。现在让我们看看利用覆盖索引的查询效果如何:
这次我们之间查询最后一页的数据(利用覆盖索引,只包含id列),如下:

 

select id from product limit 866613, 20 

查询时间为0.2秒,相对于查询了所有列的37.44秒,提升了大概100多倍的速度。

那么如果我们也要查询所有列,有两种方法,

  • id>=的形式:

 

SELECT * FROM product 
WHERE ID > =(select id from product limit 866613, 1) limit 20

查询时间为0.2秒,简直是一个质的飞跃啊。

  • 利用join

 

SELECT * FROM product a 
JOIN (select id from product limit 866613, 20) b ON a.ID = b.id

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10464.html

(0)
上一篇 2022-12-27
下一篇 2022-12-27

相关推荐

  • Python etree:快速解析XML和HTML的利器

    Python etree:快速解析XML和HTML的利器Python etree是Python语言中的一个快速解析XML和HTML的利器。它底层使用libxml2和libxslt进行解析和转换的,因此速度非常快。而且Python etree提供了非常简单易用的API,使得开发者可以轻松地解析XML和HTML文档,获取其中的数据。本文将对Python etree进行全方位的介绍。

    2024-07-27
    29
  • ClickHouse(08)ClickHouse表引擎概况「终于解决」

    ClickHouse(08)ClickHouse表引擎概况「终于解决」目前ClickHouse的表引擎主要有下面四个系列,合并树家族、日志引擎系列、集成的表引擎和其他特殊的引擎。 #合并树家族 Clickhouse中最强大的表引擎当属MergeTree(合并树)引擎及该

    2023-06-12
    146
  • 数据库-MySQL

    数据库-MySQL数据库-MySQL 一日不思量,也攒眉千度。 简介:数据库-MySQL。 一、索引 B+ Tree 原理 树简介参考链接:https://www.cnblogs.com/taojietaoge/p/1

    2023-04-19
    164
  • Ubuntu20 安装mysql8并开启远程访问

    Ubuntu20 安装mysql8并开启远程访问ubuntu20.04使用命令安装数据库默认就是8.x版本的 1.安装 sudo apt-get install mysql-server mysql-client 2.修改配置文件 sudo vi…

    2023-04-12
    158
  • mysql使用技巧 行类视图子查询「建议收藏」

    mysql使用技巧 行类视图子查询「建议收藏」查找描述信息中包括robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部 film表为电影表,category表为电影分类表,film_category表为电影表与电影

    2023-02-19
    146
  • mysql8.0修改用户权限_mysql给用户赋予权限

    mysql8.0修改用户权限_mysql给用户赋予权限最近测试中台的存储服务,涉及到MySQL用户操作的命令,记录一下。 1、查看所有用户 select user from mysql.user; 2、查看当前登陆用户 select user(); 3、

    2023-04-16
    141
  • 用 Python 计算平均数

    用 Python 计算平均数Python 是一种高级编程语言,它可以用来计算各种数值。其中,计算平均数是 Python 上的一个基本应用。在本文中,我们将介绍如何使用 Python 计算平均数,包括 Python 计算单个数字的平均数、Python 计算多个数字的平均数、Python 计算任意多个数字的平均数,并提供对应的代码示例。

    2024-05-20
    81
  • MySQL通配符与正则表达式

    MySQL通配符与正则表达式通配符 通配符必须全文匹配时才为真,使用LIKE关键字 |字符|示例|含义| | | |: | |_|"a_b"|任意一个字符"axb",其中x可以使任意字符,

    2023-05-13
    143

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注