索引优化分析:

性能分析:

EXPLAIN关键字是什么?

1、简单说:查询执行计划
2、使用EXPLAIN关键字可以模拟优化器执行SQL查询于, 从而知道MySQL是如何处理你的SQL语句的
分析你的查询语句或是表结构的性能瓶颈

EXPLAIN关键字如何使用?

EXPLAIN后跟上SQL语句

EXPLAIN + SQL

EXPLAIN能干嘛?

1、表的读取顺序
2、数据读取操作的操作类型
3、哪些索引可以使用
4、哪些索引被实际使用
5、表之间的引用
6、每张表有多少行被优化器查询

查询的类具体的列

id select_type table type possible_keys key key_len ref rows Extra

各列详细解释

列名 说明
id 表的读取顺序:和table结合来看
id相同:执行顺序由上至下
id不同:id值越大优先级越高,越先被执行
id相同不同同时存在:id不同的值越大越先被执行,id相同的依次执行
select_type 数据读取操作的操作类型
有哪些?

SIMPLE:简单的select查询,查询中不包含子查询或者union
PRIMARY:查找中若包含任何复杂的子部分,最外层查询则被标记为
SUBQUERY:在SELECT或WHERE列表中包含了子查询
DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中
UNION:若第二个SELCT出现在UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,外层SELCT被标记为DERIVED
UNION RESULT:从UNION表获取结果的SELECT
table 显示这一行数据是关于哪张表的
type 访问的类型

从最好到最差依次如下: system > const > eq_ref > ref > range -> index > all
system: 表只有一行记录(等于系统表), 这是const类型的特例,平时不会出现,这个也可以忽略不计
const:表示通过索引一次就找到了,const用于比较primary key或者unique索引, 因为只匹配一行数据,所以很快如将主键置于where列表中, MySQL就能将该查询转换为一个常量
eq_ref:唯一性索引扫描,对于每一个索引键,表中只有一条记录与之匹配, 常见于主键索引或是唯一索引
ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回索引匹配某个单独值的行,然而它可能会找到多个符合条件的行,索引它应该属于查找和扫描的混合体
range:只检索给定范围的行, 使用一个索引来选择行, key列显示使用了那个索引一般就是在你的where语句中出现了between、>、<、in等查询,这种范围扫描索引比全表扫描要好,因为它只是需要开始于索引的某一点,而结束与另一点,不用扫描全部索引
index:Full Index Scan,index与ALL区别为index类型只遍历索引树,这通常比ALL快因为索引文件通常比数据文件小。也就是说虽然ALL和index都是读全表,但是index是从索引中读取的,而ALL是从硬盘读取的
ALL:Full Table Scan 将遍历全表以查找到匹配的行
一般来说的保证查询达到range以上,最好到ref
possible_keys 显示可能应用在这张表的索引,一个或者多个。查询设计到的字段若存在索引,则该索引将被列出。但是不一定被查询实际使用
key 实际使用的索引, 如果为NULL,则没有使用索引查询中若使用了覆盖索引,则该索引仅出现在key列表中
覆盖索引: 就是说select后面查询的字段和创建的索引顺序个数一一吻合
key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的查询,在不存精确性的情况下,长度越短越好
key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是用过表内检索出的
ref ref:显示索引的那一列被使用了,如果可能的话,是一个常数,哪些列或常量被用于查找索引列上的值
rows rows:根据表统计信息及索引引用情况,大致估算出找到所需的记录要读取的行数
Extra 包含不适合在其他列中显示但十分重要的额外信息
Using filesort: 说明MySQL会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为“文件排序”,这里建议,在ORDER BY的时候一定要参考索引,不然容易文件呢排序,尽量避免
Using temporary: 使用了临时表保存中间结果,MySQL在对查询结果排序时使用了临时表。常见于ORDER BY和分组查询GROUP BY, 尽量避免
Using index: 表示相应的select操作中使用覆盖索引(Covering Index),避免访问了表的额数据行, 效率不错! 如果同时出现Using Where 表明索引被用来执行索引键值的查找;如果没有同时出现Using WHere 表明索引引用来读取数据而非执行查找动作
Using where: 使用了where过滤
Using join buffer:使用了连接缓存
impossible where: where子句的值总是false,不能用来获取任何元组
select table optimized away:在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作或者对应MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段在进行计算,查询执行计划生成的阶段即完成优化
distinct: 优化distinct操作,在知道第一匹配的元组后即停止找同样值的动作

覆盖索引:

就是select的数据列只用了索引中就能够取得,不必读取数据行,MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖

转载于:https://www.cnblogs.com/chenyichen/p/10591120.html

(二)MySQL调优之-EXPLAIN关键字相关推荐

  1. mysql分析表关键字_SQL调优利器——explain关键字详解(MySQL)

    前言 有时候,我们写好SQL后发现执行查询的时间超过了预期,但自己已经有根据表的已有索引去写SQL语句,这个时候就要考虑是否是在查询的过程中出现了索引失效的问题.那么我们可以怎么样去验证SQL在执行过 ...

  2. Mysql调优之explain执行计划详解

    前言 explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了 explai ...

  3. 记录一次从小白开始的mysql调优(一)

    由于所负责的项目数据量不太大,之前较少涉及到mysql调优 首先遇到了一个例子,领导给了一条sql过来要求优化,这个还是比较简单的 一.去掉多余的字段以及函数 select count(1) from ...

  4. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  5. Mysql调优你不知道这几点,就太可惜了

    转载自  Mysql调优你不知道这几点,就太可惜了 一.Mysql的逻辑分层 Mysql分为:连接层.服务层.引擎层.存储层. 当客户端向服务端发起操作请求的时候,执行过程是这样的: 1.客户端端与M ...

  6. MySQL调优篇:单机数据库如何在高并发场景下健步如飞?

    在当前的IT开发行业中,系统访问量日涨.并发暴增.线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代中一个炙手可热的名词,无论是在开发.面试过程中,性能优化都是一个常谈常新的话题.而MySQL作为整 ...

  7. 【mysql】mysql调优时必须掌握的慢查询语句排查命令

    文章目录 前言: 开启并设置慢查询语句的时间 1. 查看是否开启慢查询语句 2. 开启慢查询 3. 修改满查询定义的时间 4. 开启 记录没有使用索引的查询 5. 查询有多少慢查询记录 分析工具 前言 ...

  8. MySql调优时:必须掌握的慢查询语句排查命令

    mysql慢查询日志用来记录mysql在相应时间内超过阈值的语句. 阈值定义在long_query_time里. mysql> show variables like '%long_query_ ...

  9. MySQL执行计划(MySQL调优的重要利器)

    文章目录 看完本篇文章你能学到什么? 一.MySQL执行计划 1.1 id字段 1.2 select_type 字段 1.3 table 字段 1.4 partitions 字段 1.5 type字段 ...

  10. MySQL 调优/优化的 101 个建议!

    转载自 MySQL 调优/优化的 101 个建议! MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适 ...

最新文章

  1. 算法:三种简单排序算法
  2. Intellij Idea生成serialVersionUID的方法
  3. Android 中使用MediaRecorder进行录像详解(视频录制)
  4. java swing 列表框_Java开发笔记(一百三十一)Swing的列表框
  5. 搭建ElasticSearch7.4.2集群
  6. sudo gem install cocoapods
  7. ETL-informatica进阶资料整理
  8. Android之四大组件、六大布局、五大存储
  9. android 应用中 assets 下文件的绝对路径
  10. 基于KMP与Levenshtein模糊匹配算法的银行联行号查询(转)
  11. VS 0x80041FEB
  12. 老旧笔记本的WIN10系统安装Win7还是Win8版本声卡驱动?
  13. HotPower超级CRC计算器与第三方CRC计算器名词解释与对照及操作
  14. 超级会员创作者收益说明
  15. python作中国地图背景气泡图_Python数据可视化:香港地图、房价可视化,绘制气泡图...
  16. 相亲网站平台制作建设,第九篇
  17. 读书笔记:《乌合之众--这是一本书》
  18. Windows编程之COM组件
  19. 微信小程序的开发(前端)
  20. 怎么画好软件产品原型图?

热门文章

  1. linux等候脚本,linux – 在bash脚本中继续之前等待通过ssh运行的脚本完成
  2. kmo检验和bartlett球形检验_互助问答59期:多期DID平行趋势检验以及因子分析累计方差贡献率...
  3. C++ 原子减 atomic::fetch_sub fetch_add 返回值
  4. boost线程指南手册
  5. C++ std::shared_ptr是什么意思
  6. ubuntu apt 卸载 golang
  7. kubernetest pod为ContainerCreating、ImagePullBackOff状态 怎么办
  8. arm开发板放张图片动起来_Python与Zynq的桥梁,米尔PYNQ开发板来了
  9. 飞机大战小游戏3.0
  10. Spring框架工作原理