MySQL 原理与优化之Limit 查询优化

 更新时间:2022年08月14日 10:52:40   作者:51CTO崔皓  
这篇文章主要介绍了MySQL 原理与优化之Limit 查询优化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

假设有表tb_sku,其表结构如下:

表中大约有200w条记录,执行如下的sql 语句大约 4.36s 返回数据

select count(*) from tb_sku;

接着我们使用 对其进行分页查找:

select * from tb_sku limit 0,10;

limit 语句 其中0 代表起始位置,10 为每页返回的数据数量。

如上图所示,很快就返回了查询结果。

接着我们再使用SQL 语句

select * from tb_sku limit 10,10;

语句从记录位置10的位置开始再往下返回10 条记录,也就是第二页的信息。其返回时间也是比较快。

然后,我们加大起始位置 到100w如下:

select * from tb_sku limit 1000000,10;

此时返回时间需要0.74 s,这说明了使用limit 对大数据量的表进行分页,位置越靠后效率越低。拿上面的例子来说,limit 会先对 100w 的数据进行排序,然后再返回10 条数据,而且仅仅返回100w 到 100w 零10条 的记录,其他查询的记录都会丢弃掉,这种做法查询排序的代价非常大。

由此我们需要对大数据量表进行limit 操作进行优化,官方给出的方案是通过覆盖索引和子查询的方式进行优化

根据这个思路首先对id 进行查询:

select id from tb_sku order by id limit 1000000,10;

查询结果就只需要0.34s 比之前的0.74s要快多了。究其原因,因为直接返回id的信息,并没有进行回表操作,所以速度别select * 要快

由于我们需要获得select * 的信息,也就是tb_user 所有字段的信息,因此需要将上面的查询结果和tb_user 进行jion 操作。

select s.* from tb_sku s ,(select id from tb_sku order by id limit 1000000,10 ) t where s.id = t.id;

这里通过查询id 和子查询 的方式将查询结果缩短为 0.38s,比之前直接通过 select * 的方式要缩短一倍的查询时间。

到此这篇关于MySQL 原理与优化之Limit 查询优化的文章就介绍到这了,更多相关MySQL Limit 优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 麒麟系统上安装 MySQL 8.0.24的详细步骤(避坑指南)

    麒麟系统上安装 MySQL 8.0.24的详细步骤(避坑指南)

    这篇文章主要介绍了麒麟系统上安装MySQL8.0.24的详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • mysql数据库查询基础命令详解

    mysql数据库查询基础命令详解

    这篇文章主要介绍了mysql数据库查询基础命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • MySQL之临时表的实现示例

    MySQL之临时表的实现示例

    MySQL临时表是存储在内存或者磁盘上的临时数据表,它们的生命周期只限于当前数据库会话,临时表的创建和使用方式与普通表类似,本文就详细的介绍了MySQL之临时表,感兴趣的可以了解一下
    2023-08-08
  • 详解MySQL事务日志redo log

    详解MySQL事务日志redo log

    你知道MySQL 中是如何保证数据不丢失的吗,即便是MySQL发生异常重启了,数据也可以恢复,你了解MySQL产生的事务日志redo log是干嘛的吗,明白它的工作机制吗,本文就给大家详细讲解MySQL事务日志redo log
    2023-07-07
  • 实现MySQL数据库锁的两种方式

    实现MySQL数据库锁的两种方式

    今天我们就来聊一聊数据库的锁,实现数据库锁的两种方式,一个是实现乐观锁的方式,一个是实现悲观锁的实现方式,文中的代码示例介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 常见的数据库1045密码错误问题解决方法

    常见的数据库1045密码错误问题解决方法

    连接MySQL数据库时难免会遇到1045错误,主要是因为用户输入的用户名或密码错误被拒绝访问,下面这篇文章主要给大家介绍了关于常见的数据库1045密码错误问题的解决方法,需要的朋友可以参考下
    2023-04-04
  • MySQL修改root密码的3种实用方法

    MySQL修改root密码的3种实用方法

    最近在看项目,搭建本地环境时候,忘记mysql的密码,怎么修改密码,网上找了半天,终于配合着几个帖子搞定了,下面这篇文章主要给大家介绍了关于MySQL修改root密码的3种实用方法,需要的朋友可以参考下
    2023-11-11
  • MySql主键id不推荐使用UUID的原因分析

    MySql主键id不推荐使用UUID的原因分析

    MySQL的索引主要分为主键索引(PRIMARY KEY),唯一索引(UNIQUE) ,普通索引(INDEX)和全文索引(FULLTEXT) ,主键索引是一种特殊的唯一索引,不允许有空值,这篇文章主要介绍了MySql主键id不推荐使用UUID的原因分析,需要的朋友可以参考下
    2023-03-03
  • mysql 5.7.20 zip安装教程

    mysql 5.7.20 zip安装教程

    这篇文章主要为大家详细介绍了mysql 5.7.20 zip安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 深入sql数据连接时的一些问题分析

    深入sql数据连接时的一些问题分析

    本篇文章是对关于sql数据连接时的一些问题进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论