mysql执行计划extra为null_MySQL执行计划extra解析
MySQL执行计划extra解析
mysql的执行计划最让人难以捉磨的地方就是extra栏位的提示了,这是由于其他的
栏位没有提供详细的信息,因此多一个栏位来附加额外的信息,以利于用户更好的理解
sql是怎么执行的.以下是一些最常见的出现值:
创建测试对像,并插入一些数据
create table t1 ( a int primary key,b int,c varchar(100));
create table t2 ( a int primary key,b int,c varchar(100));
create index idx_b on t1(b);
create index idx_b on t2(b);
1,extra为NULL
mysql> explain select * from t1;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 9980 | NULL |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
一般这种情况下没有where条件,直接做全表扫描得到sql执行结果.
2,extra 的值是using where
mysql> explain select * from t1 where c='d';
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 9980 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
where的列为非索引列,通过使用全表扫描,然后再使用where条件去过滤行.
3,extra的值是 Using index condition
mysql> explain select * from t1 where b>900;
+----+-------------+-------+-------+---------------+-------+---------+------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+-------+---------+------+------+-----------------------+
| 1 | SIMPLE | t1 | range | idx_b | idx_b | 5 | NULL | 1 | Using index condition |
+----+-------------+-------+-------+---------------+-------+---------+------+------+-----------------------+
1 row in set (0.00 sec)
表示使用索引条件去读取表中的数据,先扫描索引,然后根据索引指向的主健去读取对应的数据
4,extra的值是Using filesort
mysql> explain select * from t1 order by c;
+----+-------------+-------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------+
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 9980 | Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------+
1 row in set (0.00 sec)
表示语句中有排序操作
5,extra的值是Using temporary
mysql> explain select c ,count(*) from t1 group by c;
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 9980 | Using temporary; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
1 row in set (0.00 sec)
表示使用了临时表或是文件来排取,一般出现在group by,distinct和集合操作语句中.
6,extra的值为Impossible WHERE
mysql> explain select * from t1 where a is null;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
1 row in set (0.00 sec)
出现在优化阶段,优化器根据表定义可以判断出where条件根本不可能成立,比如主健不可能为空
7,extra的值 Using join buffer (Block Nested Loop)
mysql> explain
-> select *
-> from t1 inner join t2
-> on (t1.c=t2.c);
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 9980 | NULL |
| 1 | SIMPLE | t2 | ALL | NULL | NULL | NULL | NULL | 9980 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
2 rows in set (0.00 sec)
mysql使用了优化过的nest loop算法,一次读取多个块.
mysql执行计划extra为null_MySQL执行计划extra解析相关推荐
- 【mysql系列】细谈explain执行计划之“谜”
目录 理论Part 概念 实践Part id select_type table type possible_keys key key_len ref rows filtered Extra 总结 聊 ...
- mysql执行计划explain介绍_Mysql执行计划EXPLAIN详解
分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.explai ...
- 没有执行此操作所需的足够可用空间。_一文详解 MySQL 高可用之 DRBD | 原力计划...
作者 | wzy0623责编 | 屠敏出品 | CSDN 博客大多数MySQL高可用解决方案都是基于MySQL自带的各种复制技术.本质上是将一个实例上的数据更新或事务,在其它实例上进行重放,从而完成数 ...
- php 设置window计划任务,windows下设置计划任务自动执行PHP脚本
背景: 环境部署在linux下或者windows中,可以使用windows的自动任务设置自动执行脚本执行一些日常运维任务 图形界面设置相对比较简单 准备工作: wamp(集成的PHP执行环境) 已经写 ...
- 查询sql执行计划_使用SQL执行计划进行查询性能调整
查询sql执行计划 In the previous articles of this series (see the index at bottom), we went through many as ...
- SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略
SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略 执行事务代码QP02去修改检验计划组54,因为其检验特性item里没有指派取样策略. 发现Sampling proc ...
- Linux任务计划、周期性任务执行
Linux任务计划.周期性任务执行 未来的某时间点执行一次任务:at, batch 周期性运行某任务: cron 电子邮件服务: smtp: simple mail transmission prot ...
- 在 Windows server 2008 下计划任务无法正常执行bat批处理文件
在Windows server 2008下计划任务无法正常执行bat批处理文件的问题 windows server 2008 下计划任务执行批处理,总是提示执行成功, 但是批处理该输出的内容却没有输出 ...
- 查看真实的执行计划 绑定变量对执行计划的影响--“绑定变量窥探”
--##################################################### --#### AWR执行计划 ...
最新文章
- Linux环境下进入MySQL环境报权限问题:Access denied for user 'root@localhost' (using password:YSE)...
- 【Java面试题】3 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析...
- 浅析为什么要使用ST的固件库,谈谈我个人的工具思维!!!
- 原型模式coding-克隆破坏单例
- AT2390-[AGC016F]Games on DAG【状压dp,SG函数】
- 学习C ,常见的误解
- Android Studio Problems
- iOS工程开发笔记二
- 由一个bug引发的SQLite缓存一致性探索
- RHCE 第三讲 文件系统
- 算法知识点——(3)监督学习——SVM
- 小区广播背景音乐系统IP网络广播解决方案
- Django搭建后台管理系统
- VB NetShare
- 2021年化工自动化控制仪表考试题库及化工自动化控制仪表报名考试
- 谷歌浏览器Chrome通过命令截图整个网页,screen,通过插件生成gif图片,以及通过插件进行录屏
- 原型模式-广告邮件推送
- GD32F103 USB 虚拟U盘实验一(内部Flash)
- linux立即重启计算机命令,轻松掌握Linux关机重启命令
- Linux-fsck.ext4
热门文章
- allow_unreachable flag
- python右下角弹出消息
- from torch._C import * ImportError: DLL load failed: 找不到指定的模块。
- 步态识别 GaitSet
- ElasticSearch Python Client ReadTimeout
- pyinstaller 打包成exe
- Keras中几个重要函数用法
- link-time version is older than compile-time version
- 基于opencv的BackgroundSubtractorMOG2目标追踪
- c++ svd实例整理