执行计划使用explain sql查询。

1、 构造数据

usecoshaho002;drop table if existsinfo;create tableinfo(

idint primary keyAUTO_INCREMENT,

namevarchar(32),

agetinyint,

sexvarchar(8),

addressvarchar(32),

phonevarchar(32),

birthday date,

descriptionvarchar(128)

);alter table info add unique(phone);alter table info add indexname_index(name);alter table info add indexname_age_sex_index(name, age, sex);alter table info addfulltext(description);

describe info;INSERT INTO info VALUES(null, 'hkx1', 1, 'M', 'sc', '1234567890', '1989-01-03', 'chengxuyuan huawei1'),

(null, 'hkx2', 2, 'F', 'sc', '1234567891', '1989-02-03', 'chengxuyuan huawei2'),

(null, 'hkx3', 3, 'M', 'sc', '1234567892', '1989-03-03', 'chengxuyuan huawei3'),

(null, 'hkx4', 4, 'F', 'sc', '1234567893', '1989-07-05', 'chengxuyuan huawei4'),

(null, 'hkx5', 5, 'F', 'sc', '1234567894', '1989-07-04', 'chengxuyuan huawei5'),

(null, 'hkx6', 6, 'M', 'sc', '1234567895', '1989-07-06', 'chengxuyuan huawei6'),

(null, 'hkx7', 7, 'F', 'sc', '1234567896', '1989-07-07', 'chengxuyuan huawei7'),

(null, 'hkx1', 8, 'F', 'sc', '1234567897', '1989-07-08', 'chengxuyuan huawei8'),

(null, 'hkx2', 9, 'F', 'sc', '1234567898', '1989-07-03', 'chengxuyuan huawei9'),

(null, 'hkx3', 10, 'M', 'sc', '1234567899', '1989-01-03', 'chengxuyuan huawei10'),

(null, 'hkx4', 11, 'F', 'sc', '1234567810', '1989-07-03', 'chengxuyuan huawei11'),

(null, 'hkx5', 5, 'F', 'sc', '1234567820', '1989-07-03', 'chengxuyuan huawei12'),

(null, 'hkx6', 6, 'M', 'sc', '1234567830', '1989-02-03', 'chengxuyuan huawei13'),

(null, 'hkx7', 10, 'F', 'sc', '1234567840', '1989-09-03', 'chengxuyuan huawei14'),

(null, 'hkx8', 1, 'M', 'sc', '1234567850', '1989-01-03', 'chengxuyuan huawei1'),

(null, 'hkx9', 13, 'F', 'sc', '1234567860', '1989-06-03', 'chengxuyuan huawei2'),

(null, 'hkx0', 2, 'M', 'sc', '1234567870', '1989-07-03', 'chengxuyuan huawei3');select * from info;

2、 查询执行计划

usecoshaho002;select * frominfo;

explainselect * from info where id = 2;

explainselect * from info where name = 'hkx1';

explainselect * from info where name like 'hkx1%';

explainselect * from info where name like '%1';

explainselect * from info where age = 2;

explainselect * from info where name = 'hkx1' and sex = 'M';

explainselect * from info where name = 'hkx1' and age = 0;

explainselect * from info where name = 'hkx1' and age = 0 and sex ='M';

explainselect * from info where phone = '1234567890';

explainselect * from info where description = 'chengxuyuan huawei1';

explainselect * from info where name = 'hkx1' union select * from info;

可以看到,查询结果包含id,select_type,table,partitions,type,possible_keys,key,key_len,ref,rows,filtered,Extra组成。

1、 type

type表访问类型,和查询效率紧密相关。type效率从好到坏依次为:

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

一般来说,得保证查询至少达到range级别,最好能达到ref。

ALL:全表扫描。

index:扫描全部索引树。

range:扫描部分索引(索引范围扫描)。常见于between、、like等的查询。

ref:非唯一性索引扫描,返回匹配某个单独值的所有行。常见于使用非唯一索查询,组合索引查询;

eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描;

const,system:表最多有一个匹配行,它将在查询开始时被读取,列值当做常量处理。如将使用主键查询。(system是const特例,表只有一行记录)

NULL:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引。

2、  id

select查询的序列号

3、 select_type

select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。

(1) SIMPLE:查询中不包含子查询或者UNION

(2) 查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARY

(3) 在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERY

(4) 在FROM列表中包含的子查询被标记为:DERIVED(衍生)

(5) 若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在 FROM子句的子查询中,外层SELECT将被标记为:DERIVED

(6) 从UNION表获取结果的SELECT被标记为:UNION RESULT

4、 table

该行查询所引用的表。

5、 possible_keys

指出MySQL能使用哪个索引在该表中找到行。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。如果是空的,没有相关的索引。这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。

6、 key

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

7、 key_len

显示MySQL决定使用的键长度。表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。

注:key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。

8、 ref

显示哪个字段或常数与key一起被使用。

9、 rows

这个数表示mysql要遍历多少数据才能找到,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数,在innodb上可能是不准确的。

10、 Extra

包含不适合在其他列中显示但十分重要的额外信息。

(1)Only index:意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。

(2)using where:使用上了where限制,表示MySQL服务器在存储引擎受到记录后进行“后过滤”(Post-filter),如果查询未能使用索引,Using where的作用只是提醒我们MySQL将用where子句来过滤结果集。

(3)impossible where: 表示用不着where,一般就是没查出来啥。

(4)Using filesort:MySQL中无法利用索引完成的排序操作称为文件排序,当我们试图对一个没有索引的字段进行排序时,就是filesoft。它跟文件没有任何关系,实际上是内部的一个快速排序。

(5)Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,使用filesort和temporary的话会很吃力,WHERE和ORDER BY的索引经常无法兼顾,如果按照WHERE来确定索引,那么在ORDER BY时,就必然会引起Using filesort,这就要看是先过滤再排序划算,还是先排序再过滤划算。

参考:http://blog.csdn.net/xifeijian/article/details/19773795

mysql 执行计划_mysql执行计划相关推荐

  1. mysql查询sql计划_MySQL 查询计划 总结

    (一)查询计划 释义 查询计划: SQL语句是怎样进行执行的 使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的.分析你的查询语句或 ...

  2. 引导mysql执行计划_Mysql执行计划详解

    --歌手表 CREATE TABLE`singer` ( `id`int(11) unsigned NOT NULL, `update_time`datetime DEFAULT NULL, `nam ...

  3. mysql创建每天执行计划_mysql执行计划

    执行计划分析 什么是执行计划? select * from  city where sname='张飞'; 分析的是优化器按照内置的代价计算模型算法, 最终选择后的执行计划. cost ? 代价,成本 ...

  4. mysql event 日志_MySQL Event计划任务刷慢日志

    前言 最近在尝试一个日志系统graylog来收集mysql的慢查询日志提,供后续的分析.监控和报警等.测试步骤已经到日志已成功收集到graylog,测试时需要刷一些慢查询日志出来.为了刷比较多的日志和 ...

  5. mysql学习计划_MySQL学习计划

    2019.1.15更新 没有按照既定计划执行,借口当然是一大堆,耐心得读完了这本书,受益匪浅,解决了我日报和周报中的很多问题,虽然离目标还有很大的距离,但是这本书让我看到了希望,科技改变世界,这一行行 ...

  6. mysql的从节点能否执行事务_MySQL执行事务的语法与流程详解

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  7. mysql 事件计划_mysql 事件计划

    一.开启mysql事件计划 首先在sql中查询计划事件的状态:SHOW VARIABLES LIKE 'event_scheduler' 如果返回的是off表示当前是关闭状态,如果是on当前已经开启了 ...

  8. mysql 分析执行计划的效率_MySQL执行计划分析

    大家好,我是anyux.本文介绍MySQL执行计划分析. 作用 通过explain或desc命令将优化器选择后的执行计划截取出来,便于管理和判断语句的执行效率 获取执行计划 desc SQL语句 ex ...

  9. mysql 执行计划不对_MySQL执行计划显示与执行过程不符合

    一 建表和现象的过程如下 CREATE TABLE t1 (id1 INT, a1 INT, b1 INT, PRIMARY KEY(id1)); CREATE TABLE t3 (id3 INT U ...

最新文章

  1. bat脚本如何自动输入y_Linux系统如何设置开机自动运行脚本?
  2. Flutter从0基础到App上线
  3. python开发好学吗-Python人工智能开发难学吗
  4. Socket 阻塞模式和非阻塞模式
  5. liunx 下巧妙使用代理服务器(squid)
  6. Java继承多态经典案例分享
  7. win10安装mysql5.7.15_win10上如何安装mysql5.7.16(解压缩版)
  8. 政策解读:《智能硬件产业创新发展专项行动(2016-2018年)》(上)
  9. c语言实现 windows socket_C语言实现Socket简单通信
  10. 漫步微积分十二——隐函数、分数指数
  11. 数据分布_数据蒋堂 | 数据分布背后的逻辑
  12. thymealf 高级用法_mybatis基础系列(四)——关联查询、延迟加载、一级缓存与二级缓存...
  13. 前端性能优化方法总结
  14. 使用Dos清除系统临时文件
  15. 茶文化网页代码(详细解释)
  16. 计算机实战项目之 [含论文+辩论PPT+源码等]微信小程序社区疫情防控+后台管理|前后分离VUE[包运行成功
  17. 知乎网页版免登录浏览
  18. 前端如何在H5页面调起微信支付
  19. java的耦合与解耦
  20. 电商平台-商品价格的设计与架构

热门文章

  1. 域名可以转让注册人吗_网店可以转让吗?
  2. 小程序开发之基础知识(0)
  3. idea查看一个类的所有子类_java new一个对象的过程中发生了什么
  4. const 常量_var,let,const 的区别?
  5. 2022大厂面试必问要点总结
  6. MyBatis映射文件1(增删改、insert获取自增主键值)
  7. django class类即视图类添加装饰器的几种方法
  8. 梯度下降和EM算法,kmeans的em推导
  9. 【Electron】Electron开发入门(一):开发环境搭建
  10. hdu4956 Poor Hanamichi