mysql慢查询日志 AND 一个mysql优化 (带条件的count)

慢查询日志记录的就是慢的语句

1.怎么样算是慢?

ong_query_time :慢查询阈值,当查询时间多于设定的阈值时(s),记录日志。
log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。

2.如何开启?

show variables like '%slow_query_log%';
set global slow_query_log=1

Variable_name Value
slow_query_log ON
slow_query_log_file /www/server/data/mysql-slow.log

log_output:日志存储方式。log_output=‘FILE’表示将日志存入文件,默认值是’FILE’。log_output='TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。

3.工具 (复制自 https://www.cnblogs.com/saneri/p/6656161.html

得到返回记录集最多的10个SQL。
mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log

得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log

得到按照时间排序的前10条里面含有左连接的查询语句。
mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log

另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。
mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more


同事跑过来找我解决的一个历史sql (count 条件统计)

原来是这个样子:


改为:

SELECT
	min(wp.post_time),
	max(wp.post_time),
	count(wp.post_type = 1 or null),
	count(wp.post_type = 2 or null),
	count(wp.post_id)
FROM
	weili_user AS u
	JOIN weili_user_extend AS e ON u.user_id = e.user_id
	left join weili_post as wp on wp.user_id = u.user_id
	GROUP BY u.user_id
	LIMIT 0,20

猜你喜欢

转载自blog.csdn.net/weixin_38447055/article/details/82813021
今日推荐