sql查询慢的解决思路

第一步:根据日志定位慢查询sql

 

1.首先查看一下数据库中的变量(设置)

在mysql中执行,show VARIABLES like '%quer%',其中

slow_query_log:慢sql日志是否开启

slow_query_log_file:日志文件内容

long_query_time:sql执行多久被视为慢sql

sql查询慢的解决思路

在mysql中执行,show STATUS LIKE '%slow_queries%',这个变量的含义为,慢sql执行的数量(次数)。

 

sql查询慢的解决思路

2. 打开慢sql日志

执行,set GLOBAL show_query_log = ON 即可打开开关。

将sql执行时间设置为想要的秒数。

set GLOBAL long_query_time = 1 (可以设置自己想要的描述)

设置完成之后需要重新连接数据库查看,设置是否生效。

 

sql查询慢的解决思路

3. 制造慢sql

准备一张100w+的数据表

编写sql

SELECT `name` FROM person_info_large ORDER BY `name` DESC

打开日志文件

Query_time为sql运行时间。

 

sql查询慢的解决思路

第二步:使用explain等工具分析sql

主要关心以下连个字段的值:

type:扫描级别,红色为全表扫描

system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>all

extra

Using filesort:表示MySql 会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容,可能在内存或者磁盘上进行排序。MySql 中无法利用索引完成排序操作成为"文件排序"。

Using temporary:表示MySql在对查询结果排序是使用临时表。常见于排序order by 和分组查询group by。

sql查询慢的解决思路

第三步:修改sql或者尽量让sql走索引

将查询字段以及排序字段加索引

alter table person_info_large add index idx_name(name)