慢查询定位
开启慢查询日志:如果一个sql执行的时间超过了它指定的一个时间,那么便把这条sql记录在慢查询日志中。
看慢查询日志是否开启:show variables like ‘slow_query_log%’.
通过如下命令开启慢查询日志:
set global slow_query_log = on;开启慢查询日志
set global slow_query_log_file = ‘OAK-slow.log’; 指定日志文件名
set global log_queries_not_using_indexes = ON; 表示会记录没有使用索引的查询sql
SET long_query_time = 10;指定慢查询的阈值,单位是秒。如果sql执行时间超过阈值,就属于慢查询,记录在文件中。
查询慢查询日志:mysqldumpslow工具;使用文本打开。
慢查询优化
查询是否使用了索引,只表示一个sql的执行过程,并不代表这个sql的执行效率,列入一个sql中where id = 1,这个就使用到了主键索引,而且是单值查询,此时效率就会高,但是如果where id > 0,即使存在主键索引,但由于还是范围查找,全表臊面,效率也还是没有提高。而慢查询日志关注的是sql的执行时间,一个sql一旦执行时间超过了指定的阈值,那么就会出现在慢查询日志中,即使一个sql使用了索引,但是它的效率不高执行不快的话,也是会出现在慢查询日志中。
我们在关注索引时,不要只关注到是否使用了,还要关注索引是否减少了扫描表的行数,如果扫描行数少了,那么效率才会得到提升。对于一个大表来讲,不仅仅要去创建索引,还是提高过滤性。过滤性好,执行效率才会高。