我正在申请人口普查数据处理,它有大约10个标准作为收集的信息关于每个人(地区,年龄,性别,婚姻状况,宗教,......等),我决定使用Mysql,我创建每个条件和表“person”的表,在这些条件表主键上有列作为外键。
我需要在“人员”表格中对GROUP BY这些标准列的任何子集进行分组,并获得每个组合的总计数。
我有大约300万条记录,而人员表的外键列默认在InnoDB中编入索引,某些测试所需的时间大约是10秒到1分钟。
由于允许随机设置的列分组不可能使用复合索引,所以我的问题是如何在这种情况下区分加速性能?
实施例: 架构:人(c1,c2,c3,c4,...) 我需要做以下的查询:
SELECT c2,c4, count(*) FROM person GROUP BY c2, c4;
c2,c4 - 我的意思是来自所有列的随机子集,不是必须从c1,c2,...开始,这很容易通过简单的复合索引来解决加速性能,但它可以是任何随机子集,所以我不知道如何使用加速。
答案 0 :(得分:0)
需要完整扫描。期。没有索引,没有外键等会有所帮助。
...然而
如果表大于缓存,则将受I / O限制。在 this 的情况下,寻找收缩表或增加RAM的方法将是有益的。
MySQL没有“位图索引”。无论如何,他们可能没什么帮助。
10个标准导致1023个组合。与每个人做点什么都不实际。
您提到了外键...请勿JOIN
查询查询中的其他表格,而应在JOIN
和COUNT
之后执行GROUP BY
。 (这会进行一些查找而不是数百万次。)