我正在尝试查询大型表格,类似于7000万条记录。困难的是基于三个字段的查询组没有响应。这样做有一个聪明的方法吗?是否逐个使用VID
而不是动词字段?
这是我运行的查询:
SELECT
VID, s_name, verb, o_name, count(*) as total
FROM
table_name
group by verb, s_name, o_name;
答案 0 :(得分:1)
评论有点长。在7000万行中进行MySQL聚合是一项昂贵的操作。
您可以尝试以下方法,看看性能是否更好?
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
的文件排序 - 并且性能可能会提高。