MySQL性能分析及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
假设表有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或子查询)
- using filesort
参考:
http://blog.sina.com.cn/s/blog_4586764e0100o9s1.html(以上内容转自此篇文章)
MySQL性能分析及explain的使用(转)的更多相关文章
- MySQL性能分析及explain的使用
MySQL性能分析及explain用法的知识 1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id selectty ...
- MySQL性能分析及explain的使用说明
1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id selecttype table type possible_k ...
- mysql 性能分析及explain用法
转载自http://blog.sina.com.cn/s/blog_4586764e0100o9s1.html 使用explain语句去查看分析结果 如 explain select * from ...
- MySQL索引,MySQL性能分析及explain的使用,分析SQL查询性能
可以使用explain来分析MySQL查询性能,举例如下: 1.使用explain语句去查看分析结果 如 explain select * from test1 where id=1; 会出现: id ...
- MySQL性能分析之Explain
目录 Explain基础 Explain进阶 Explain基础 关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output ,这里需要强调rows是核心指标, ...
- MySQL性能分析(Explain)
更多知识,请移步我的小破站:http://hellofriend.top 1. 概述 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的.分析你的查 ...
- 神奇的 SQL 之 MySQL 性能分析神器 → EXPLAIN,SQL 起飞的基石!
前言 开心一刻 某人养了一头猪,烦了想放生,可是猪认识回家的路,放生几次它都自己回来了.一日,这个人想了个狠办法,开车带着猪转了好多路进山区放生,放生后又各种打转,然后掏出电话给家里人打了个电话,问道 ...
- mysql性能分析之explain的用法
之前是一直没有听过explain这个关键字的, 最近因为项目中总是会有慢查询的一些操作, 所以请教了旁边的同事帮忙排查下原因, 看到同事用explain来分析一些sql语句, 感觉好像发现了新大陆一样 ...
- MySQL性能分析, mysql explain执行计划详解
MySQL性能分析 MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析 ...
随机推荐
- Centos7 升级内核版本
1.查看当前内核版本 $ uname -r -.el7.x86_64 $ uname -a Linux k8s-master -.el7.x86_64 # SMP Tue Nov :: UTC x86 ...
- Aurora — 一个在 MSOffice 内输入 LaTeX 公式的很好用插件
from http://blog.csdn.net/GarfieldEr007/article/details/51452986 工具名称:Aurora2x (下载) 压缩包内有详细的安装说明. 刚 ...
- Python列表中查找某个元素的索引(多个)
enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 以下是 enumerate() 方法的语法: e ...
- Codeforces 1060E(dfs计数)
题目链接 题意 给一棵树,对于一个节点,与它相邻的结点可以连一条边,求所有点对间距离之和 思路 任意两点间的距离被优化为$\left \lceil \frac{s}{2} \right \rceil$ ...
- day 16 - 2 内置函数(二)练习
内置函数(二)练习 1.用 map 来处理字符串列表,把列表中所有人都变成 sb,比方 alex_sbname=['alex','wupeiqi','yuanhao','nezha'] name=[' ...
- url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介【转】
引子 浏览器URl地址,上网一定会用到,但是浏览器地址有中文或者浏览器url参数操作的时候,经常会用到encodeURIComponent()和decodeURIComponent()以及encode ...
- Django跨域请求
一.jsonp方式 同源策略会阻止ajaxa请求,但不阻止src. jsonp方式其实是利用了<script>标签可以直接跨域的性质,在body中生成一个<script>标签, ...
- 批量检测服务器是否能telnet连通
# coding: UTF-8import osimport sysimport jsonimport platformfrom _utils.patrol2 import data_format,r ...
- 帆软报表(finereport) 折叠树
在进行展现数据时,希望模板的数据是可以动态折叠的,即点击数据前面的加号才展开对应下面的数据,可通过树节点按钮实现折叠树效果 实现思路: 1.这里建立一个内置数据集 添加数据 设置模板样式,添加颜色和对 ...
- PyMysql的LIKE查询%问题
今天写一个模糊匹配的接口的时候,发现PyMysql的防注入方式会将%给转义,就算是写两个%%也是无用,依旧查不出来结果 Google翻了,Baidu翻了,一样没有适用的解决方法. 后来灵机一动想到了方 ...