MySQL查询优化

explain详解

mysql为我们提供了很有用的辅助武器explain,它向我们展示了mysql接收到一条sql语句的执行计划。根据explain返回的结果我们便可以知道我们的sql写的怎么样,是否会造成查询瓶颈,同时根据结果不断的修改调整查询语句,从而完成sql优化的过程
explain返回内容

  1. id SELECT识别符。这是SELECT查询序列号。这个不重要,查询序号即为sql语句执行的顺序
  2. select_type
  3. type 连接类型
  4. possible_keys 提示使用哪个索引会在该表中找到行,不太重要
  5. keys MYSQL使用的索引,简单且重要
  6. key_len MYSQL使用的索引长度
  7. ref ref列显示使用哪个列或常数与key一起从表中选择行。
  8. rows 显示MYSQL执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引
  9. Extra 该列包含MySQL解决查询的详细信息。

type

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `no` varchar(10) NOT NULL,
  `name` varchar(20) NOT NULL,
  `position` varchar(20) NOT NULL,
  `age` int(10) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `i_name` (`name`) USING BTREE,
  KEY `i_age` (`age`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

1. ALL 全表扫描
这里写图片描述
2.index 只会扫描索引
这里写图片描述
3.range range指的是有范围的索引扫描,相对于index的全索引扫描,它有范围限制,因此要优于index
这里写图片描述
4.ref 出现该连接类型的条件是: 查找条件列使用了索引而且不为主键和unique
这里写图片描述
5.eq_ref 连表查询会出现 连表查询原理
这里写图片描述
6.const 满足条件的记录只用一条, 通常出现在主键和唯一索引中
这里写图片描述

连表查询

这里写图片描述使用索引

这里写图片描述不使用索引

using temporary 官方解释:”为了解决查询,MySQL需要创建一个临时表来容纳结果。典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时。“”很明显就是通过where条件一次性检索出来的结果集太大了,内存放不下了,只能通过家里临时表来辅助处理
using filesort 官方解释:“MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值