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解析相关推荐

  1. 【mysql系列】细谈explain执行计划之“谜”

    目录 理论Part 概念 实践Part id select_type table type possible_keys key key_len ref rows filtered Extra 总结 聊 ...

  2. mysql执行计划explain介绍_Mysql执行计划EXPLAIN详解

    分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.explai ...

  3. 没有执行此操作所需的足够可用空间。_一文详解 MySQL 高可用之 DRBD | 原力计划...

    作者 | wzy0623责编 | 屠敏出品 | CSDN 博客大多数MySQL高可用解决方案都是基于MySQL自带的各种复制技术.本质上是将一个实例上的数据更新或事务,在其它实例上进行重放,从而完成数 ...

  4. php 设置window计划任务,windows下设置计划任务自动执行PHP脚本

    背景: 环境部署在linux下或者windows中,可以使用windows的自动任务设置自动执行脚本执行一些日常运维任务 图形界面设置相对比较简单 准备工作: wamp(集成的PHP执行环境) 已经写 ...

  5. 查询sql执行计划_使用SQL执行计划进行查询性能调整

    查询sql执行计划 In the previous articles of this series (see the index at bottom), we went through many as ...

  6. SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略

    SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略 执行事务代码QP02去修改检验计划组54,因为其检验特性item里没有指派取样策略. 发现Sampling proc ...

  7. Linux任务计划、周期性任务执行

    Linux任务计划.周期性任务执行 未来的某时间点执行一次任务:at, batch 周期性运行某任务: cron 电子邮件服务: smtp: simple mail transmission prot ...

  8. 在 Windows server 2008 下计划任务无法正常执行bat批处理文件

    在Windows server 2008下计划任务无法正常执行bat批处理文件的问题 windows server 2008 下计划任务执行批处理,总是提示执行成功, 但是批处理该输出的内容却没有输出 ...

  9. 查看真实的执行计划 绑定变量对执行计划的影响--“绑定变量窥探”

    --##################################################### --####     AWR执行计划                           ...

最新文章

  1. Linux环境下进入MySQL环境报权限问题:Access denied for user 'root@localhost' (using password:YSE)...
  2. 【Java面试题】3 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析...
  3. 浅析为什么要使用ST的固件库,谈谈我个人的工具思维!!!
  4. 原型模式coding-克隆破坏单例
  5. AT2390-[AGC016F]Games on DAG【状压dp,SG函数】
  6. 学习C ,常见的误解
  7. Android Studio Problems
  8. iOS工程开发笔记二
  9. 由一个bug引发的SQLite缓存一致性探索
  10. RHCE 第三讲 文件系统
  11. 算法知识点——(3)监督学习——SVM
  12. 小区广播背景音乐系统IP网络广播解决方案
  13. Django搭建后台管理系统
  14. VB NetShare
  15. 2021年化工自动化控制仪表考试题库及化工自动化控制仪表报名考试
  16. 谷歌浏览器Chrome通过命令截图整个网页,screen,通过插件生成gif图片,以及通过插件进行录屏
  17. 原型模式-广告邮件推送
  18. GD32F103 USB 虚拟U盘实验一(内部Flash)
  19. linux立即重启计算机命令,轻松掌握Linux关机重启命令
  20. Linux-fsck.ext4

热门文章

  1. allow_unreachable flag
  2. python右下角弹出消息
  3. from torch._C import * ImportError: DLL load failed: 找不到指定的模块。
  4. 步态识别 GaitSet
  5. ElasticSearch Python Client ReadTimeout
  6. pyinstaller 打包成exe
  7. Keras中几个重要函数用法
  8. link-time version is older than compile-time version
  9. 基于opencv的BackgroundSubtractorMOG2目标追踪
  10. c++ svd实例整理