1、使用explain语句去查看分析结果,如

explain select * from test1 where id=1;

会出现:

id  selecttype  table  type possible_keys  key key_len  ref rows  extra

其中

  • type=const表示通过索引一次就找到了
  • key=primary的话,表示使用了主键
  • type=all表示为全表扫描
  • key=null表示没用到索引
  • type=ref因为这时认为是多个匹配行,在联合查询中,一般为ref
2、MySQL中的组合索引

假设表有id,key1,key2,key3,把三者形成一个组合索引,则

如:

where key1=.... where key1=1 and key2=2 where key1=3 and key3=3 and key2=2

根据最左原则,这些都是可以使用索引的

from test where key1=1 order by key3

用explain分析的话,只用到了normal_key索引,但只对where子句起作用,而后面的order by需要排序

3、使用慢查询分析:

在my.ini中:

long_query_time=1
log-slow-queries=d:\mysql5\logs\mysqlslow.log

把超过1秒的记录在慢查询日志中

可以用mysqlsla来分析之。也可以在mysqlreport中,有如DMS分别分析了select,update,insert,delete,replace等所占的百份比

4、MyISAM和InnoDB的锁定

MyISAM中,注意是表锁来的,比如在多个update操作后,再select时,会发现select操作被锁定了,必须等所有update操作完毕后,再能select

InnoDB的话则不同了,用的是行锁,不存在上面问题。

5、MySQL的事务配置项

innodb_flush_log_at_trx_commit=1

表示事务提交时立即把事务日志写入磁盘,同时数据和索引也更新

innodb_flush_log_at_trx_commit=0

事务提交时,不立即把事务日志写入磁盘,每隔1秒写一次

innodb_flush_log_at_trx_commit=2

事务提交时,立即写入磁盘文件(这里只是写入到内核缓冲区,但不立即刷新到磁盘,而是每隔1秒刷新到盘,同时更新数据和索引)

6、explain用法

explain tbl_name
或:
explain [extended] select select_options
前者可以得出一个表的字段结构等等,后者主要是给出相关的一些索引信息,而今天要讲述的重点是后者。
举例:

explain select * from event;
+—-+————-+——-+——+—————+——+———+——+——+——-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——-+——+—————+——+———+——+——+——-+
| 1 | SIMPLE | event | ALL | NULL | NULL | NULL | NULL | 13 | |
+—-+————-+——-+——+—————+——+———+——+——+——-+
1 row in set (0.00 sec)

各个属性的含义:

  • id

    • select查询的序列号
    • select_type
    • select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。
  • table
    • 输出的行所引用的表。
  • type
    • 联合查询所使用的类型。
    • type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:
    • system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
    • 一般来说,得保证查询至少达到range级别,最好能达到ref。
  • possible_keys
    • 指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。这时要提高性能,可通过检验where子句,看是否引用某些字段,或者检查字段不是适合索引。
  • key
    • 显示MySQL实际决定使用的键。如果没有索引被选择,键是null。
  • key_len
    • 显示MySQL决定使用的键长度。如果键是null,长度就是null。文档提示特别注意这个值可以得出一个多重主键里MySQL实际使用了哪一部分。
  • ref
    • 显示哪个字段或常数与key一起被使用。
  • rows
    • 这个数表示MySQL要遍历多少数据才能找到,在InnoDB上是不准确的。
  • Extra
    • 如果是only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。
    • 如果是where used,就是使用上了where限制。
    • 如果是impossible where 表示用不着where,一般就是没查出来啥。
    • 如果此信息显示using filesort或者using temporary的话会很吃力,where和order by的索引经常无法兼顾,如果按照where来确定索引,那么在order by时,就必然会引起using filesort,这就要看是先过滤再排序划算,还是先排序再过滤划算。
  • 常见的一些名词解释
    • using filesort

      • MySQL需要额外的一次传递,以找出如何按排序顺序检索行。
    • using index
      • 从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。
    • using temporary
      • 为了解决查询,MySQL需要创建一个临时表来容纳结果。
    • ref
      • 对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取
    • all
      • 完全没有索引的情况,性能非常地差劲。
    • index
      • 与all相同,除了只有索引树被扫描。这通常比all快,因为索引文件通常比数据文件小。
    • simple
      • 简单select(不使用union或子查询)

参考:

http://blog.sina.com.cn/s/blog_4586764e0100o9s1.html(以上内容转自此篇文章)

MySQL性能分析及explain的使用(转)的更多相关文章

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

    MySQL性能分析及explain用法的知识 1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id  selectty ...

  2. MySQL性能分析及explain的使用说明

    1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id selecttype table type possible_k ...

  3. mysql 性能分析及explain用法

    转载自http://blog.sina.com.cn/s/blog_4586764e0100o9s1.html 使用explain语句去查看分析结果 如   explain select * from ...

  4. MySQL索引,MySQL性能分析及explain的使用,分析SQL查询性能

    可以使用explain来分析MySQL查询性能,举例如下: 1.使用explain语句去查看分析结果 如 explain select * from test1 where id=1; 会出现: id ...

  5. MySQL性能分析之Explain

    目录 Explain基础 Explain进阶 Explain基础 关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output ,这里需要强调rows是核心指标, ...

  6. MySQL性能分析(Explain)

    更多知识,请移步我的小破站:http://hellofriend.top 1. 概述 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的.分析你的查 ...

  7. 神奇的 SQL 之 MySQL 性能分析神器 → EXPLAIN,SQL 起飞的基石!

    前言 开心一刻 某人养了一头猪,烦了想放生,可是猪认识回家的路,放生几次它都自己回来了.一日,这个人想了个狠办法,开车带着猪转了好多路进山区放生,放生后又各种打转,然后掏出电话给家里人打了个电话,问道 ...

  8. mysql性能分析之explain的用法

    之前是一直没有听过explain这个关键字的, 最近因为项目中总是会有慢查询的一些操作, 所以请教了旁边的同事帮忙排查下原因, 看到同事用explain来分析一些sql语句, 感觉好像发现了新大陆一样 ...

  9. MySQL性能分析, mysql explain执行计划详解

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

随机推荐

  1. usb输入子系统写程序(三)

    目录 usb输入子系统写程序 小结 内核修改 怎么写代码 类型匹配 probe disconnect 程序设计 1th匹配probe 2th 获取usb数据 3th 输入子系统上报按键 title: ...

  2. HDU 1049(蠕虫爬井 **)

    题意是一只虫子在深度为 n 的井中,每分钟向上爬 u 单位,下一分钟会下滑 d 单位,问几分钟能爬出井. 本人是直接模拟的,这篇博客的分析比较好一些,应当学习这种分析问题的思路:http://www. ...

  3. MySQL初步

    一 写在开头1.1 本节内容本节的主要内容是MySQL的基本操作(来自MySQL 5.7官方文档). 1.2 工具准备一台装好了mysql的ubuntu 16.04 LTS机器. 二 MySQL的连接 ...

  4. Python面向对象进阶和socket网络编程-day08

    写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...

  5. WEB内容换行

    word-wrap:break-word 单词间换行 word-break:break-all 单词内也可以换行 white-space属性指定元素内的空白怎样处理 normal 默认.空白会被浏览器 ...

  6. 【webpack】中file-loader和url-loader使用方法

    file-loader 可以指定要复制和放置资源文件的位置,以及如何使用版本哈希命名以获得更好的缓存.此外,这意味着 你可以就近管理图片文件,可以使用相对路径而不用担心部署时 URL 的问题.使用正确 ...

  7. 使用工具intellij idea 进行java web开发简介

    一.工具下载及安装准备 1.首先下载工具  Intellij idea ,下载地址:https://www.jetbrains.com/ 2.破解 百度下载一个 JetbrainsCrack-2.7- ...

  8. 在Linux中调试段错误(core dumped)

    在Linux中调试段错误(core dumped) 在作比赛的时候经常遇到段错误, 但是一般都采用的是printf打印信息这种笨方法,而且定位bug比较慢,今天尝试利用gdb工具调试段错误. 段错误( ...

  9. asp.net MVC路由配置总结

    URL构造 命名参数规范+匿名对象 routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}&qu ...

  10. 图文详解互联网根基之HTTP

    这是本人对<图解HTTP>和<HTTP权威指南>阅读后总结的大家常用的.重要的知识点,前端.后端同学居家必备! 一.概述 HTTP是Hyper Text Transfer Pr ...