mysql优化慢查询

43 篇文章 1 订阅
11 篇文章 0 订阅

mysql优化慢查询

背景:

最近mysql数据库因为某张表的数据量越来越大,导致数据库的查询速度越来越慢,慢查询越来越多,为了解决这个问题,决定将此表(table1_name)备份到历史备份表(table2_name)中

分析:

一、查看慢查询次数
在这里插入图片描述
2、mysqldumpslow慢日志分析工具查找都是哪些sql慢查询操作
经常使用的参数:
-s,是order的顺序
al 平均锁定时间
ar 平均返回记录时间
at 平均查询时间(默认)
c 计数
l 锁定时间
r 返回记录
t 查询时间

得到返回记录最多的20个sql

mysqldumpslow -s r -t 20 sqlslow.log

得到平均访问次数最多的20条sql

mysqldumpslow -s ar -t 20 sqlslow.log

得到平均访问次数最多,并且里面含有ttt字符的20条sql

mysqldumpslow -s ar -t 20 -g "ttt" sqldlow.log
解决办法

一、备份历史表数据

$ mysqldump -uuser -ppasswd --add-drop-table --force dbname table2_name > /data/services/mysql_bak/table2_name.sql

二、清空历史表并且释放表空间

mysql> use dbname;
mysql> truncate table table2_name;
mysql> OPTIMIZE TABLE  table2_name;   ##释放表空间;显示不支持,实际上已进行重建和分析,空间已经回收
mysql> show table status like 'table2_name' \G    ##查看表空间状态

在这里插入图片描述
在这里插入图片描述
三、备份数据表到历史表

##1、根据创建时间条件查询每个月的表数据量
mysql> SELECT * FROM table1_name WHERE DATE_FORMAT(create_date,'%Y-%m') = '2018-10' ;
mysql> SELECT COUNT(1) FROM table1_name WHERE DATE_FORMAT(create_date,'%Y-%m') = '2018-10' ;
mysql> SELECT COUNT(1) FROM table1_name WHERE DATE_FORMAT(create_date,'%Y-%m') = '2018-11' ;
mysql> SELECT COUNT(1) FROM table1_name;
##2、按每月备份数据到历史表
mysql> INSERT INTO table2_name seletct * FROM table1_name WHERE DATE_FORMAT(create_date,'%Y-%m') = '2018-10' ;
mysql> INSERT INTO table2_name seletct * FROM table1_name WHERE DATE_FORMAT(create_date,'%Y-%m') = '2018-11' ;
##3、验证备份是否成功
mysql> SELECT COUNT(1) FROM table2_name;
##4、清空数据表
mysql> delete from table1_name WHERE DATE_FORMAT(create_date,'%Y-%m') = '2018-10' ;
mysql> delete from table1_name WHERE DATE_FORMAT(create_date,'%Y-%m') = '2018-11' ;

好了,这就是msyql优化慢查询的方法了,当然,优化慢查询还有许多方法,包括建立索引等等,视情况而定,如有问题可与博主一起交流讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值