SQL查询优化

explain select

extra

using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中

using temporary:表示使用了临时表存储中间结果。临时表可以是内存临时表和磁盘临时表,执行计划中看不出来,需要查看status变量,used_tmp_table,used_tmp_disk_table才能看出来。

using index:查询时不需要回表查询,直接通过索引就可以获取查询的数据。

using where:表示存储引擎返回的记录并不是所有的都满足查询条件,需要在server层进行过滤。

有的又说使用了索引但需要回表查询。

同Using index condition?

打开慢查询

命令 SHOW VARIABLES LIKE '%query%' 打开log_slow_query

通过查看慢查询日志来发现查询慢的语句,再进行优化。

  1. -- 避免使用!= <>
  2. -- 避免使用or连接,尝试用union all
  3. -- 慎用in 能用between就不要用in