一、开启慢查询日志
慢查询日志是mysql数据库提供一种记录所有执行时间超过指定时间的sql语句,然后我们可以通过日志里的sql语句进行分析、优化。通俗的点说,就是开启慢查询日志,我们就可以定位到有性能瓶颈的地方,进而进行优化。
首先查看慢查询日志配置信息:
show variables like 'slow_query%'; 查看是否开启 以及保存日志的路径
show variables like 'long_query_time'; 查询超过多少秒才记录日志
如果没有开启,或者修改路径及秒速设置:
修改配置文件
假如你不知道你的配置文件.wamp环境下D:\wamp\bin\mysql\mysql5.6.17\my.ini
;Linux下一般在/etc/my.cnf
。开启慢查询日志功能,同时设置慢查询日志文件的路径以及时间限制。
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
记得重启MySQL
分析:一般慢sql可能是因为
1、数据量巨大
- 读写分离
在框架里可以配置多个MySQL主机。根据SQL来选择不同的主机。当主服务器进行了增删改,便会生成日志(binlog)主动推送给两台”从”服务器 - 分库
-读写分离 也是分库的一种
-把不活跃的数据 分离到其它库 - 分表
-垂直分表
垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系-水平分表
水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放
2、查询导致索引失效
3、表的字段较多,使用select时,要什么只显示什么
4、多表关联
-考虑反范式设计,适当冗余字段