【发布时间】:2017-04-08 23:37:36
【问题描述】:
我正在申请人口普查数据处理,它有大约 10 个标准作为收集每个人的信息(地区、年龄、性别、maritalStatus、宗教等),我决定使用 Mysql,我创建每个条件的表和表“人”的列作为这些条件表主键上的外键。
我需要对“人”表上这些标准列的任何子集进行 GROUP BY 并获得每个组合的总计数。
我有大约 300 万条记录,InnoDB 中默认对 person 表的外键列进行索引,一些测试所需的时间大约是 10 秒到 1 分钟。
由于允许随机的列分组,不可能使用复合索引,所以我的问题是在这种情况下如何区分加速性能?
示例: 模式:人(c1,c2,c3,c4,...) 我需要做如下查询:
SELECT c2,c4, count(*) FROM person GROUP BY c2, c4;
c2, c4 - 我的意思是所有列的随机子集,不是必须从 c1, c2, ... 开始,这很容易通过简单的复合索引来解决加速性能问题,但它可以是任何随机子集,所以我不知道用什么来加速。
【问题讨论】:
-
编辑您的问题并提供您希望加快速度的示例查询。否则,问题就太宽泛了:“我有一些数据和一些假设的查询。如何让它们更快?”
-
您的查询将需要全表扫描。我没有看到任何简单的加速它们的选项——将临时表放在内存中,获得更好的硬件,使用支持并行处理的不同数据库。
-
i created tables for every criteria为什么不使用一个包含所有标准的表并添加适当的关系呢?每个人一个真的是一个糟糕的设计 -
首先它们之间的区别在于一些额外的东西,其次它们只有 10 个
-
由于每个条件的值范围很小,位图索引可以成为解决方案吗?
标签: mysql sql performance group-by rdbms