【发布时间】:2011-02-22 18:39:18
【问题描述】:
我已经创建了一个 sql 表,我在其中索引了磁盘上的文件。 表上有超过 100 万条记录。 我已经为 ext 和 size 添加了索引,但是执行这个查询仍然需要一分钟多的时间,它告诉我 ext 使用的空间量。 如何提高此选择的性能?
select ext,
ROUND((sum(size) / (1073741824))) as TotalSizeGB,
count(*) as Count
from fileindex
group by ext
order by TotalSizeGB desc;
解释输出:
|| *id* || *select_type* || *table* || *type* || *possible_keys* || *key* || *key_len* || *ref* || *rows* || *Extra* ||
|| 1 || SIMPLE || fileindex || index || _NULL_ || ext || 27 || _NULL_ || 1892234 || Using index; Using temporary; Using filesort ||
【问题讨论】:
-
你能告诉我们查询计划吗?使用解释dev.mysql.com/doc/refman/5.5/en/explain.html
-
我不认为你可以改进它,因为它正在从表中加载所有数据。
-
@augusto 除非
ext上缺少可用于执行分组的索引 -
“使用临时;使用文件排序”是主要问题。如果没有 ORDER BY,查询可能会快得多。更改 sort_buffer_size 也可能有所帮助。使用 TRIGGER 避免了整个问题,您没有计算运行时间,只有在插入/更新/删除期间。
标签: mysql performance