MySQL常见瓶颈

1、CPU在饱和的时候一般发生在数据装入内存或者从磁盘上读取数据的时候

2、磁盘I/O瓶颈发生在装入数据远大于内存容量的时候

服务器硬件的性能瓶颈:top、free、iostat和vmstat来查看系统的性能状态

Explain

查看执行计划,使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或者是表结构的性能瓶颈。

查看的执行计划可以显示如下信息:

语法格式:explain+SQL语句

执行计划中包含的信息:

id: select查询的序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序

三种情况:id相同,执行顺序由上至下

id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

id相同不同,同时存在,id越大,越先被执行

select_type: 常见的值主要有六个,SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION、UNION RESULT,主要显示查询类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。

1、SIMPLE:简单的select查询,查询中不包含子查询或者UNION

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

3、SUBQUERY:在select或者where列表中包含了子查询

4、DERIVED:在from列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中。

5、UNION:若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,外层select将被标记为:DERIVED。

6、UNION RESULT:从UNION表获取结果的SELECT。

table: 显示这一行的数据是关于哪一张表的。

type: 访问类型,主要有以下的值:

显示查询使用了何种类型,从最好到最差依次是:

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

1、system: 表中只有一行记录(等于系统表),这是const类型的特例,平时不会出现,这个也可以忽略不计

2、const:表示通过索引一次就找到了,const用于比较primary key或者unique索引,因为只匹配一行数据,所以很快,如将主键置于where列表中,MySQL就能将该查询转换为一个常量。

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

4、ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以它应该属于查找和扫描的混合体。

5、range:只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引,一般就是在你的where语句中出现了between、<、>、in等的查询,这种范围扫描索引比全表扫描要好,因为它只需要开始于索引的某一点,而结束另外一点,不用扫描全部索引。

6、index:Full Index Scan,index与ALL区别为index类型只遍历索引树,这通常比ALL快,因为索引文件通常比数据文件小(也就是说虽然all和index都是读全表,但是index是从索引中读取的,而all是从硬盘中读取的)。

7、all:Full Table Scan,将遍历全表以找到匹配的行

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

possible_keys:显示可能应用在这张表中的索引,一个或者多个,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

key:实际使用的索引,如果是NULL,则表示没有使用索引,查询中若使用了覆盖索引,则该索引仅仅出现在key列表中。

key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好,key_len显示的值为索引字段的最大可能长度,并非使用使用长度,即key_len是根据表定义计算而得,不是通过表内检索出来的。

ref:显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或者常量被用于查找索引列上的值。

rows:根据表统计信息及索引选用情况,大致估算出找到所需要的记录所需要读取的行数。每张表有多少行被优化器查询。

Extra:包含不适合在其他列中显示但是十分重要的信息:

1、Using filesort:说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为“文件排序”。

2、Using temporary:使用了临时表保存中间结果,MySQL在对查询结果排序时使用临时表,常见于排序order by和分组查询group by。

3、Using index:表示相应的select操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率不错!如果同时出现using where,表明索引被用来执行索引键值的查找,如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。注意:如果使用覆盖索引,一定要注意select列表中只取出需要的列,不可select *,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。

4、Using where:表明使用了where过滤

5、Using join buffer:使用了连接缓存

6、impossible where:where子句中的值总是false,不能用来获取任何元组

7、select tables optimized away:在没有group子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储索引优化COUNT(*)操作,不比等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

8、distinct:优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作。

覆盖索引

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

理解方式二:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行,毕竟索引叶子节点存储了它们索引的数据,当能通过读取索引就可以得到想要的数据,那就不需要读取行了,一个索引包含了或者说覆盖了满足查询结果的数据就叫做覆盖索引。

MySQL查询分析工具-Explain相关推荐

  1. mysql 查询分析工具下载_SQL分析工具下载-SQL查询工具(DB Solo)下载v5.2.5官方版-西西软件下载...

    DB Solo是一款完美的数据库查询分析工具.软件优秀跨平台SQL查询功能,支持所有主要DBMS产品:主要用于POJO的J2EE代码生成器,EJB 3.0批注,使用DAO  模式的JDBC持久层,JU ...

  2. MySQL查询分析(explain)

    在不确定应该在哪些数据列上创建索引的时候,我们可以从EXPLAIN SELECT命令那里往往可以获得一些帮助.这其实只是简单地给一条普通的SELECT命令加一个EXPLAIN关键字作为前缀而已.有了这 ...

  3. mysql 查询分析工具下载_数据库管理系统-DB查询分析器(数据库查询分析软件)6.04 中文免费版-东坡下载...

    DB查询分析器是一个功能强大的万能数据库查询分析软件,支持对各种关系数据源(包括Oracle.Sybase.DB2.Informix.MS SQL SERVER.MYSQL.MS ACCESS.Par ...

  4. mysql慢查询分析工具和分析方法

    1.mysql慢查询分析工具 1.参考文档: http://www.ttlsa.com/mysql/analyse-slow-query-log-using-anemometer/ http://is ...

  5. MySQL系列-高级-性能分析工具-EXPLAIN

    MySQL系列-高级-性能分析工具-EXPLAIN 1. EXPLAIN概述 1.1 官网介绍 1.2 EXPLAIN 基本语法 2. 基于函数和存储过程插入数据 2.1 创建表 2.2 创建函数和过 ...

  6. 【性能优化】MySQL常用慢查询分析工具

    常用慢查询分析工具 引言 在日常的业务开发中 MySQL 出现慢查询是很常见的 大部分情况下会分为两种情况 1.业务增长太快 2.要么就是SQL 写的太xx了 所以 对慢查询 SQL 进行分析和优化很 ...

  7. mysql的查询分析工具下载_万能数据库查询分析器(ODBC数据库查询分析工具)V7.03 最新版...

    万能数据库查询分析器(ODBC数据库查询分析工具)是一款功能强大,性能良好的数据库查询辅助工具,对开发人员来说是一款省时省力的数据库分析工具. 功能特点: 可以通过它查询ODBC数据源(包括世面上所有 ...

  8. MySQL 索引分析除了 EXPLAIN 还有什么方法?

    作者 | adrninistrat0r 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 前言 对于非数据库开发人员而言,难以对MySQL源码进行分析或调试,接近一个黑盒,但MySQL提供 ...

  9. MySQL性能分析及explain的使用

    MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析结果 如explai ...

最新文章

  1. Mac 使用Android Studio查找数字签名的方法SHA1或MD5
  2. 飞机上为啥禁止使用手机?
  3. Java序列化和反序列化小记
  4. The Internals of PostgreSQL
  5. canvas绘制阴影
  6. 【转】如何理解c和c++的复杂类型声明
  7. Windows网络接口API函数
  8. 【转】UITableView详解(UITableViewCell
  9. radvd移植到arm交叉编译问题解决
  10. 20210701:随机信号的功率谱估计相关算法的实现
  11. python 核心数_Python hex()
  12. layer.open()利用代码实现伪阻塞
  13. django -- 分页功能
  14. 正则、grep与egrep工具
  15. NSIS静默安装VC运行库插件
  16. OpenLayers使用高德导航接口实现动画animate
  17. Hive 的 distribute by
  18. 年薪30万+的HR这样做数据分析!(附关键指标免费模版)
  19. 国内首部区块链行业纪录片开播
  20. HTML下拉菜单改变颜色,CSS下拉菜单中字体颜色问题

热门文章

  1. 赵小楼《天道》《遥远的救世主》深度解析(81)一个不愿躺着对话的女人,应给与绝对尊严,这符合强势文化范畴
  2. 大物知识点复习框架——光学
  3. 卷尺精度标准_卷尺的精度为多少mm 卷尺测量误差的原因有哪些
  4. 约瑟夫环 有15个人围成一圈,按顺序淘汰
  5. 自控力读书笔记 第五章 大脑的弥天大谎:为什么我们误把渴望当幸福?
  6. Oracle体系结构之内存结构(SGA、PGA)
  7. 基数排序——多关键字排序(MSD/LSD)以及链式基数排序
  8. 【codeforces85D】
  9. Codeforces 85D Sum of Medians(线段树)
  10. 【leetcode】 剑指 Offer学习计划(java版本含注释)(上)