mysql开启慢查询日志记录,先查看 show variables like '%quer%';
参数说明:
slow_query_log : 是否已经开启慢查询
slow_query_log_file : 慢查询日志文件路径
long_query_time : 超过多少秒的查询就写入日志
log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启)
如何开启呢 set global slow_query_log = on; set long_query_time = 1;set globle log_output = file;
设置完之后,就可以在mysql下的slow_log看到查询超过一秒的日志。
问题发现了,现在判断问题所在:
1.首先服务端那边先看是什么问题导致的mysql查询慢。mysql连接池没有配置等等都问题
2.查看是不是sql的问题。
有一些用法会导致sql查询变慢。最常见的就是select * 和select 字段 的区别。但是其实*和查单个速度差不多,差距就在于网络传输上,*比较多才会导致慢。
count (*)和count (id) 前者更快一些。
join连表,要小表驱动大表,也就是数据量小的表做为主表进行链接,要给连表条件增长索引。
where 字段创建索引,对于经常使用的where字段能够创建索引,多个where字段能够创建联合索引。对于不怎么经常使用的查询,咱们就不必创建索引了,毕竟索引建多了并很差,维护索引也是有代价的。
order by排序字段创建索引,给排序字段创建索引是由于索引是有序的,不须要排序,这样的话排序时候直接走有序索引就避免了排序过程。否则mysql还要进行如下排序。这样就能够把排序的时间省掉。
避免长事务,不要写长事务,不要把没必要要的查询操做归入事务中。
多看执行计划,经过explain查询执行计划,看有没有用到索引,mysql有时候会选错索引,由于是否走索引是经过抽样调查来决定的,因此并不许确,再加上要回表查询。因此有时候会不走索引。