MySQL性能分析工具

MYSQL性能分析工具

1.SQL执行频率查询

查询数据库增删改查的操作次数

语法:show  [session|global] status like 'Com_______';

2.慢查询日志 

慢查询日志就是定位到运行时间过长的SQL语句,针对个别语句进行建立索引等优化方式

查看是否开启慢查询日志:show variables like 'slow_query_log'

如果没有开启 开mysql配置文件 etc/my.cnf 中加上如下配置信息:

#开启mysql慢查询日志
slow_query_log=1
#设置慢查询日志的时间为5秒,SQL语句执行时间超过5秒就会视为慢查询,记录慢查询日志
long_query_time=5

然后查询日志文件锁定执行时间过长的SQL

3.profile查询

profile用来查询SQL语句在各个阶段所消耗的时间

使用前先查询 当前mysql 是否支持profile

语法:select @@have_profiling

用法:先执行一条查询语句 然后show profile 找到查询语句的Query_id,
           show profile for query query_id;

4.Explain查询(最常用)

explain 最常用来查看表的执行顺序,以及当前查询语句是否使用索引

语法:explain  查询语句

结果如下:


首先我们来了解一下explain的字段名称

1,id:  

 id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的顺序增长的。 id列越大执行优先级越高,id相同则从上往下执行,id为NULL最后执行。

2,select_type 查询类型:

可以为一下任何一种类型

simple  简单select(不使用union或子查询)

primary   最外面的select

union    union中的第二个或后面的select语句

dependent union  union中的第二个或后面的select语句,取决于外面的查询

union result  union的结果。

subquery 子查询中的第一个select

dependent subquery  子查询中的第一个select,取决于外面的查询

derived    导出表的select(from子句的子查询)

3,table  输出的行所引用的表。

当 from 子句中有子查询时,table列是 格式,表示当前查询依赖 id=N 的查询,于是先执行 id=N 的查 询。

当有 union 时,UNION RESULT 的 table 列的值为,1和2表示参与 union 的 select 行id。

4,type 查找数据行记录的大概范围。

依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL,一般来说,得保证查询达到range级别,最好达到ref

system:表仅有一行(=系统表)。这是const联接类型的一个特例。

const:  表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!

eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是unique或primary key

ref:  对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是unique或primary key(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。

range:范围扫描通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定范围的行

index:扫描全索引就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接 对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般为使用覆盖索引,二级索引一般比较小,所以这 种通常比ALL快一些

ALL:即全表扫描,扫描你的聚簇索引的所有叶子节点。通常情况下这需要增加索引来进行优化了。

5,possible_keys: 如果该列是null,则没有相关的索引。在这种情况下,可以通过检查where子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用explain检查查询key 列显示mysql实际决定使用的键(索引)。如果没有选择索引,键是null。要想强制mysql使用或忽视possible_keys列中的索引,在查询中使用force index、use index或者ignore index。

6,key:这一列显示mysql实际采用哪个索引来优化对该表的访问。explain 时可能出现 possible_keys 有列,而 key 显示 NULL 的情况,这种情况是因为表中数据不多,mysql认为索引 对此查询帮助不大,选择了全表查询。如果想强制mysql使用或忽视possible_keys列中的索引,在查询中使用 force index、ignore index。

7,key_len:这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。

8,ref:显示索引在哪一列被使用了,如果可能的话,是一个常数

9,rows:  这一列显示mysql认为它执行查询时必须检查的行数。

10,Extra:这一列会显示重要的附加信息,比如是否使用覆盖索引等

你可能感兴趣的:(MySQL性能分析工具)