EXPLAIN使用分析

系列文章目录


文章目录


一、type说明

我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:

type结果值从好到坏依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

all:全表扫描

index:另一种形式的全表扫描,只不过他的扫描方式是按照索引的顺序

range:有范围的索引扫描,相对于index的全表扫描,他有范围限制,因此要优于index

ref: 查找条件列使用了索引而且不为主键和unique。其实,意思就是虽然使用了索引,但该索引列的值并不唯一,有重复。这样即使使用索引快速查找到了第一条数据,仍然不能停止,要进行目标值附近的小范围扫描。但它的好处是它并不需要扫全表,因为索引是有序的,即便有重复值,也是在一个非常小的范围内扫描。

const:通常情况下,如果将一个主键放置到where后面作为条件查询,mysql优化器就能把这次查询优化转化为一个常量。至于如何转化以及何时转化,这个取决于优化器

一般来说,得保证查询至少达到range级别,最好能达到ref,type出现index和all时,表示走的是全表扫描没有走索引,效率低下,这时需要对sql进行调优。

当extra出现Using filesor或Using temproary时,表示无法使用索引,必须尽快做优化。

possible_keys:sql所用到的索引

key:显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL

rows: 显示MySQL认为它执行查询时必须检查的行数。

这里可以参考之前写的一篇:用MySQL 执行计划分析 DATE_FORMAT 函数对索引的影响

二、MySQL中使用Show Profile

Show profile 默认是禁用的,用处是记录在服务器中运行的查询耗费的时间和其他一些查询执行状态变更相关的数据。

1.查看当前profiling配置

show variables like 'profiling%'

2.在会话级别修改profiling配置

set profiling =1

我在执行这个语句是,返回给我

0 row(s) affected, 1 warning(s): 1287 '@@profiling' is deprecated and will be removed in a future release.

看这个提示,似乎后期的版本profiling会有变动

3.查看profile记录

show profiles

当一条查询提交给服务器时,此工具会记录剖析信息到一张临时表,并为每个查询赋予一个从1开始的整数标识符。

4.要深入查看某条查询执行时间的分布

show profile for query <整数标识符>

相关推荐
程序员Sunday9 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
Yyyyyy~10 小时前
[ Mysql ] 库的操作
mysql
小米里的大麦10 小时前
16 MySQL 事务
数据库·mysql
Titan202410 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
for_ever_love__11 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
for_ever_love__12 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
java1234_小锋15 小时前
【技术专题】Mysql8 数据库 - Mysql8 触发器
数据库·mysql·mysql8
雨落在了我的手上17 小时前
MySQL数据库基础(6):增删改查操作(1)
数据库·mysql
ao-weilai18 小时前
MySQL数据库:用户管理
数据库·mysql·adb
ao-weilai19 小时前
MySQL数据库:C语言连接MySQL教程
c语言·数据库·mysql