Mysql的性能分析

mysqldumpslow的使用
1.查看慢查询日志是否打开:
在这里插入图片描述
2.打开慢查询日志:

show variables like '%log%';在结果集中找到log_queries_not_using_indexes

在这里插入图片描述
3.设置 slow_query_log为on;
在这里插入图片描述
4.查看日志存放位置:
在这里插入图片描述
5.退出mysql,定位到该目录下查看日志
在这里插入图片描述

EXPLAIN SELECT * FROM operator;

在这里插入图片描述
id : select查询的序列号
select_type : select 查询的类型,区别普通查询和联合查询
table: 查询的是哪张表
type: 访问类型 ,system–>const---->eq_ref(只有当数据量达到一定级别时才会显示)---->ref—>fulltext—>ref_or_null—>index_merge---->unique_subquery---->range---->index—>ALL
查询至少达到range级别
possible_keys :指出MySQL能使用哪个索引在该表中找到行。
key : 显示mysql使用的键
key_len : mysql 使用键的长度
ref : 显示哪个字段与主键一起使用
rows:查询结果
Extra: 扩展参数

MySQLdumpSlow参数详解:
Query_time:查询所用时间.
Lock_time: 执行这条sql语句时锁定的时间
Rows_sent:输出行数
Rows_examined:执行用时多少秒
timestamp: 时间戳

数据优化

一.索引优化

查看索引:show index from 表名
删除索引:alter table 表名 index 索引名 或 drop index 索引名 on 表名
添加索引: alter table 表名 add [index,unque] 索引名
添加主键索引:alter table 表名 add primary key(列名)
删除主键索引:alter table 表名 drop primary key(列名)
B-tree索引
可以理解为“排好序”的数据结构,利用范围查询
在多列索引上,索引要想发挥作用需满足左前缀要求,即要连接使用不能断线
尽量选择区分度高的列做索引,区分度公式:

count(columm)/count(*)

如果区分度等于0.1,代表一条扫描10条记录。
索引列不能参与计算。
尽量扩展索引,不要新建索引。
=和in可以乱序,例如:index(a,b,c) 索引,使用时可以变成where a=1 and c=2 and b=3
做索引列的字段越短性能越好。
如果查询中有某个列的范围查询,则其右边所有的列都无法使用索引优化查找。
Hash 索引
采用一定的哈希算法,把键值换算成hash值,适用于等值查询,无法利用索引完成排序,不支持多列联合索引的最左匹配规则。有大量重复值的情况下,哈希索引效率极低。

二.group by优化

查询针对一个表。
GROUP BY 使用索引的最左前缀。
只可以使用MIN()和MAX()聚集函数,并且他们均指向相同的列。

三.limit优化(子查询优化)

分页:page ,n

select  * from xx limit (page-1)*n,n

优化:
1.业务上优化
2.技术上优化(不能删除数据)

select  id ,name  from  xx  where  id>(page-1)*n  limit  n;
select  id from xx limit 100000,10;

内连接查询:(延迟优化)

select  c.id,c.name from lxx inner join (select id ,name from xx  limit 10000000,10) as  t on c.id=t.id
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值