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

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、使用汇总表优化查询

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值