我正在尝试查询一个大表,像7000万条记录。困难的是,基于三个字段的查询分组不会响应。有聪明的方法吗?在逐节中使用VID
比使用动词字段更好吗?
这是我运行的查询:
SELECT
VID, s_name, verb, o_name, count(*) as total
FROM
table_name
group by verb, s_name, o_name;
最佳答案
这段评论有点长。在MySQL中对7000万行进行聚合是一项昂贵的操作。
您可以尝试以下方法来查看性能是否更好吗?
create index idx_table_name_3 on table_name(s_name, verb, o_name);
select distinct s_name, verb, o_name
from table_name;
如果此过程在有限的时间内完成,则可能可以更有效地进行聚合。
然后试试这个:
select s_name, verb, o_name,
(select count(*)
from table_name t2
where t2.s_name = t.s_name and
t2.verb = t.verb and
t2.o_name = t.o_name
) as cnt
from (select distinct s_name, verb, o_name
from table_name
) t;
子查询应使用索引实现。聚合也应该从索引中计算出来。如果是这样,那么这将诱使MySQL不对
group by
使用文件排序-并且性能可能会提高。关于mysql - 在大表上按查询组合分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28375970/