美文网首页
MySQL性能优化(慢查询处理以及优化)

MySQL性能优化(慢查询处理以及优化)

作者: 宁静的猫 | 来源:发表于2020-01-14 15:25 被阅读0次

1、配置慢查询日志

set global slow_query_log=on #动态参数,不需要重启就可以打开慢查询日志
slow_query_log_file #指定慢查询日志的路径和文件,默认在数据目录下
long_query_time #指定SQL执行时间的阈值,默认10s,修改后重新连接才可看到更新后的值
log_queries_not_using_indexes #记录未使用索引的sql

2、mysqldumpslow 分析慢查询日志

mysqldumpslow -s r -t 10 slow-mysql.log

-s参数:指定按哪种排序方式输出结果,c:总次数,t:总时间,l:锁时间,r:总行数, at,al,ar:t,l,r平均数
-t参数:指定前几条输出

3、实时获取有性能问题的SQL

select id, `user`, `host`, DB, command, `time`, state, info 
from information_schema.PROCESSLIST where TIME > 60

4、使用performance_schema

在performance_schema数据库下执行

UPDATE `setup_instruments` SET enabled='YES', TIMED='YES' WHERE NAME LIKE 'stage%';
UPDATE `setup_consumers` SET enabled = 'YES' WHERE NAME LIKE 'events%';

5、特定SQL的查询优化

a、大表的数据修改分批处理
b、大表表结构的修改

建立新表,从老表导入数据,创建老表触发器,同步修改到新表,给老表上排他锁,老表重命名,新表重命名

c、not in 和 <> 查询

下面sql会对payment进行多次查询

select customer_id, first_name, last_name, email from customer 
where customer_id not in (select customer_id from payment);

改为left join后,查询一次即可

select a.customer_id, a.first_name, a.last_name, a.email 
from customer a left join payment b on a.customer_id = b.customer_id
where b.customer_id is null;
d、使用汇总表优化查询

提前将要统计的数据进行汇总,并记录到表中,以备后续的查询使用

相关文章

网友评论

      本文标题:MySQL性能优化(慢查询处理以及优化)

      本文链接:https://www.haomeiwen.com/subject/lcaoactx.html