page contents

mysql性能分析-------profiling和explain

MySQL5.0.37版本以上支持了Profiling – 官方手册。

attachments-2020-03-vkOIE3c55e785100be54c.jpg

1. profiling之性能分析

MySQL5.0.37版本以上支持了Profiling – 官方手册。此工具可用来查询 SQL 会执行多少时间,System lock和Table lock 花多少时间等等,对定位一条语句的 I/O消耗和CPU消耗 非常重要。
查看profiling;
  select @@profiling;
启动profiling:
set @@profiling=1 
关闭profiling :
set @@profiling=0;

  sql语句;
1.查看profile记录
show profiles;

Duration:我需要时间;
query:执行的sql语句;
2.查看详情:
show profile for query 2;
 
3.查看cup和io情况
show profile cpu,block io for query 2;

2.explain 分析


v2-36282a33bac02f9e793a163b077ef3c7_720w.png


1.id:一组数字,操作顺序,如果id相同,则执行顺序由上至下,如果是子查询,id的序号递增,值越大优先级越高,越先被执行;

2.select_type:表示每个字句的类型,简单还是复杂,取值如下;

  1.   a>simple :简单查询,无子查询或union等;
  2.   b>primary:查询中若包含复杂的子部分,最外层则被标记为primary;
  3.   c>subquery:在select或where中若包含子查询,则该子查询被标记为subquery;
  4.   d>derived:from中包含子查询,被标记为derived;
  5.   e>union:若select出现在union之后,则被标记为union;
  6.   f>union result:从union表中获取结果的select将被标记为union result;


3.table 查询的数据库表名称

4.type 联合查询使用的类型

  all :全表扫描

  index:全表扫描,只是扫描表的时候按照索引次序 进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。

range:索引范围扫描

  ref:非唯一性索引扫描,交返回匹配单独值的所有行,常见于使用非唯一性索引或唯一性索引的非唯一前缀进行的查找。

  eq_ref:唯一性索引扫描

  const、system:当mysql对查询的某部分进行优化,并转换为一个常量时。如将主键置于where列表中,mysql就能将该查询转换为一个常量。system是const的特例,当查询的表只有一行的情况下,即可使用system。


5. possible_keys: 指出mysql能使用哪个索引在表中找到行,查询涉及的字段上若存在索引,则该索引将被列出。如果为空,说明没有可用的索引

6.key:使用到了哪个索引,这里列出的是实际使用到的索引,若没有使用索引,则显示为null。

7.key_len:使用的索引的长度。在不损失精确性的情况 下,长度越短越好。

8.ref:显示索引的哪一列被使用了

9.rows:MYSQL 认为必须检查的用来返回请求数据的行数.找到所需记录,需要读取的行数,越少越好


10.Extra:不适合在其他列显示,但却十分重要的信息,常见的有如下值:
  a) Using index:使用了索引检索。
  b) where used:使用了where限制,但是用索引还不够。
  c) Using temporary:需要使用临时表来存储结果集,常见于排序和分组查询。性能差。
  d) Using filesoft:使用了文件排序,性能差。


attachments-2020-03-FU8sU0BO5e7850e9bc044.jpg

  • 发表于 2020-03-23 14:04
  • 阅读 ( 615 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章