为什么 MySQL 在此查询中使用临时和文件排序
从 event_log 和 Lookup_event_objects 表中提取对象统计信息的查询面临性能瓶颈,如 EXPLAIN 输出“使用索引;使用临时;使用文件排序”所示。原因如下:
临时表
当 ORDER BY 和 GROUP BY 子句不匹配时,或者当排序或分组列属于非-连接表。在这种情况下,您的查询会遇到第一个条件,因为 ORDER BY 子句(count_rows DESC、leo.object_desc ASC)与 GROUP BY 子句 (el.object_id) 不同。
Filesort
“Using filesort”表示MySQL无法使用索引执行ORDER BY子句中指定的排序。由于您是按计算字段 (count_rows) 进行排序,因此数据库需要执行完整的表扫描并对结果进行排序。
可能的解决方案
如建议的根据提供的答案,解决方案是消除 ORDER BY 和 GROUP BY 子句之间的差异。您可以将 count_rows 别名替换为 GROUP BY 子句中的实际计数操作:
这将消除对临时表和文件排序的需要,从而可能提高查询的性能。
以上是为什么我的查询使用临时表和文件排序?的详细内容。更多信息请关注PHP中文网其他相关文章!