MySQL分页查询的实现方式及性能优化技巧

1. 前言

MySQL 的分页查询在我们的开发过程中还是很常见的,比如一些后台管理系统,我们一般会有查询订单列表页、商品列表页等。

示例:

SELECT *  FROM  `goods`   order  by create_time   limit  0, 10;

在了解order by和limit的工作原理之前,我们首先回顾下 MySQL 的执行流程和索引结构。

注:

下面没有特别说明默认 MySQL 的引擎为 InnoDB

为讲述方便使用 select * ,生产环境不建议使用

1.1. 执行流程

3461e337c46eedc834b74e40a88f36b6.jpeg

MySQL 可以分为 Server 层和存储引擎层两部分,对于这个就不展开讲了。只需要知道一条 SQL 语句是从客户端发起请求到 Server 层,Server 层处理之后选出成本最低的执行计划去存储引擎层进行数据查询,查询出来的数据返回给 Server 层处理,最后返回给客户端。(存储引擎层根据扫描区间定位拿到数据给到 Server 层,剩下的过滤、排序、分页等操作是在 Server 层载进行处理的)。

1.2 索引结构

c29fa2675dcd472bccb4865eeba90008.jpeg

InnoDB 存储引擎的索引是一颗 B+ 树,只有主键索引树会存储全部的行记录数据,二级索引只会存储该记录对应的主键 id。所以我们使用二级索引查询数据时,如果查询的字段在二级索引没办法完全覆盖,则需要回表。

2. order by 工作原理

  准备工作

创建一张商品表,并且给价格字段设置索引

e70e13d1182ac6a8b6a8a4522c49b30e.jpeg

插入测试数据

9e9f7af74669ae2a9d182ee661768c66.jpeg

2.1 索引扫描排序

EXPLAIN  SELECT *  FROM goods 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值