Using temporary,表示使用了临时表; Using filesort,表示需要排序。 语句执行流程: 创建内存临时表,表里有两个字段m和c,主键是m; 扫描表t1的索引a,依次取出叶子节点上的id值,计算id%10的结果,记为x; 如果临时表中没有主键为x的行,就插入一个记录(x,1); 如果表中有主键为x的行,就将x这一行的c值加1; 遍历完成后
我们用 explain 分析包含 group by 的 select 语句时,从输出结果的 Extra 列经常可以看到Using temporary; Using filesort。看到这个,我们就知道MySQL使用了临时表来实现 group by。 使用临时表实现 group by,成本高,执行慢。如果能够利用索引中记录已经排好序的特性,使用索引来实现 group by,那就是鸟枪换炮了。
很明显 之前的 Using temporary 和 Using filesort 都没有了,只有Using index(使用索引了) 4.2、order by null 不排序 如果需求是不用排序,我们就可以这样做。在 sql 末尾加上 order by null selectgoods_id,count(*)asnumfromorder_infogroupbygoods_idorderbynull 但是如果是已经走了索引,或者说8.0的版本,那...
Extra: Using temporary; Using filesort 1 row in set, 1 warning (0.00 sec) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 在其中,我们获得了 temporary 和 filesort “两最糟糕的”提示。 MySQL 5.7 总是返回按组顺序排序的 GROUP BY 结果,即使查询不需要它(这可能需要昂贵...
1、如果对 group by 语句的结果没有排序要求,要在语句后面加 order by null;那么一般情况就不需要使用临时表了(上面两个优化都是在要求排序的前提下提出的优化方式) 2、尽量让 group by 过程用上表的索引,确认方法是 explain 结果里没有 Using temporary 和 Using filesort; ...
最后一列:Using temporary; Using filesort 为什么会显示用了字段排序呢? 因为在mysql5.7会对group by操作进行隐式排序。 所以在mysql5.7里面正确写group by语句的正确方式应该是: EXPLAIN SELECT img_name FROM img_info GROUP BY img_name ORDER BY NULL ...
Using filesort : 未利用到索引的默认排序,需要使用文件辅助进行排序,出现其说明SQL性能不好; Using temporary:使用临时表保存中间结果,常见于 group by ,出现其说明SQL性能不好; Using index: 说明可以直接在索引树上就能得到最终的值,避免了回表,出现其说明SQL性能很好; Using index for group-by:表示使用了 松...
explain select count(1), uid from t_dir_user where dir_id in (1803620,4368250,2890924,2033475,3038030) group by uid;使用explain分析时,会发现这个查询是使用到索引的,且Extra 那一栏会出现下面的信息。Using index condition; Using temporary; Using filesort 上述信息代表了查询是使用到了索引来做...
GROUP BY testid; 1 SIMPLE s ref PRIMARY,acct-lastupdate,acct-lastupdate-counts acct-lastupdate 78 const 2 Using where; Using index; Using temporary; Using filesort 1 SIMPLE d ref detail_runid,detail_runid_testid_result detail_runid 5 db_9_edeb6.s.RunID 1 (null) ...
在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同。 在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by可能会进行排序,触发filesort,导致sql执行效率低下。 基于这个结论,你可能会问: ...