具体的优化方法:
exist和in:
如果主查询的数据集大,使用in, select tname from teacher where tid in(x,y,z);
如果子查询的数据集大,使用exist,select tname from teacher where exist(select * from teacher);
order by:可能会出现using filesort
选择单路排序,增加buffer大小 set max_length_sort_size =
避免使用select * ...
复合索引不要跨列使用,避免出现using filesort
保证全部的排序字段排序的一致性,全升序或者降序
sql慢查询日志:用于记录sql中查询时间超过阈值的sql语句,默认是记录超过10s的日志
这个开关默认是关闭的。
检查开关是否开启:show variables like '%slow_query_log%';
临时开启:set global slow_query_log = 1;
永久开启:在mysql配置文件中开启
慢查询阈值:
show variables like '%loog_query_time%';
查询被记录的慢查询语句:
show global status like '%slow_queries%';
查看记录的慢日志文件:
cat /var/lib/mysql/localhost-slow.log
mysqldumpslow:使用这个工具来查询慢sql,可通过mysqldumpslow --help来查看使用方法
在慢查询日志中获取返回记录最多的三个sql
mysqldumpslow -s r -t 3 /var/lib/mysql/localhost-slow.log
在慢查询日志中获取访问次数最多的三个sql
mysqldumpslow -s c -t 3 /var/lib/mysql/localhost-slow.log