Mysql优化步骤

查询sql执行频率

下面步骤显示了当前session中所有统计参数的值

show status like 'Com______'
Com_begin	0
Com_check	0
Com_clone	0
Com_flush	0
Com_grant	0
Com_purge	0
Com_reset	0
查看Innodb在进行增删改查时候影像的行数
show status like innodb_row_like%

定位低效率执行SQL

可以通过以下两种方式定位执行效率低的SQL语句

  • 慢查询日志,通过慢查询日志定位执行效率低的SQL语句,用–log-slow-querief=file_name选项启动发,mysqld写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件。
  • show processlist:慢查询日志在在查询结束以后才记录,所以在应用反映执行效率出问题的时候查询慢日志并不能定位问题,可以使用show processlist命令查看当前Mysql在进行的线程,包括线程的状态,是否锁表等,可以实时地查看SQL的执行情况,同时对一些表锁操作进行优化。
  • 在这里插入图片描述```
    1,id:用户登录mysql时,系统分配的"connection_id",可以使用函数connection_id()查看
    2,user列:显示当前用户,如果不是root,这个命令参数就只显示用户权限返回的sql
    3.host:显示这个语句是从哪个ip的哪个端口上发的,可以用来跟踪出现问题的用户
    4,db:显示进程连接的是哪个数据库
    5,command列:显示当前连接的执行的命令,一般取值为休眠,查询,连接等
    6,time:显示这个操作持续的时间

### explain分析执行计划
```sql
explain sql语句
  • id:查询的序号,是一组数字,表示的是查询中执行select或操作表的顺序
  • select_type,常见的取值有SIMPLE(简单表,即不使用表连接或者子查询),PRIMARY(主查询,即外层的查询),UNION(UNIO中的第二个或者后面的查询语句),SUBQUERY(子查询中的第一个select)等
  • table 输出结果的表
  • type 表示表的连接类型,性能由好到差的连接类型为(system,const,eq_ref,ref,ref_or_null,index_merge,index_subquery,range,index,all)
  • key 表示实际使用的索引
  • key_len 索引字段的长度
  • rows 扫描行的数量
  • extra 执行情况的说明和描述
  • prossible_key 可能用到的索引

select-type

表示SELECT的类型,常见的取值如下

  • SIMPLE 简单的select查询,查询中不包含子查询或者UNION
  • PRIMARY 查询中包含任何复杂的子查询,最外层标记为该标识
  • SUBQUERY 在select或者where中包含了子查询
  • DERIVED 在FROM列表中包含的子查询,被标记为DERIVED(衍生)MYSQL会递归执行这些子查询,把结果放到临时表中
  • UNION 若第二个SELECT出现在UNION之后,则标记为NION,若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
  • UNION Result 从UNION表中获取结果的select

show profile分析SQL

mysql从5.7.3版本开始增加了对show profiles和show profile语句的支持。show profile能够在做MYSQL优化时帮助我们了解时间都耗费到哪去了。
通过have_profiling参数,能够看到当前Mysql是否支持profile

select @@have_profiling

在这里插入图片描述
如果未开启,则需要开启

set profiling=1

trace 分析优化器执行计划

MYSQL5.6提供了对SQL的跟踪trace,通过trace文件能够进一步了解为什么优化器选择A计划,而不选择B计划。
打开trace,设置格式为json,设置trace最大能够使用的内存大小,避免解析过程中因为设置了默认内存大小而不能够完整展示

SET optimizer_trace="enabled=on",end_markers_in_json=on;
set optimizer_trace_max_mem_size=100000;

执行sql

例子
SELECT * FROM sys_config

最后检查information_schema.optimer_trace就可以知道MYSQL是如何执行SQL的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值