在MemSQL中查询超过10亿行的GROUP BY

时间:2018-08-21 07:34:36

标签: sql bigdata database-performance memsql

我有一个包含13亿行的表(MemSQL,列存储模式)。我需要在3个字段(id1,id2,文本)上查询GROUP BY,并获取每个3元组的最新记录。通过装入EFS文件夹的管道填充该表。目前,它大约有20万个csv文件,每个文件2MB。

在这种情况下或是否可以通过其他方式完成优化查询时,我需要帮助。

编辑:我无法在线找到任何博客/帮助,其中大多数人谈论的解决方案涉及创建一个额外的表,这对我来说现在是不可能的(在这种情况下,内存使用非常繁重)。

如下所示的操作将无法正常工作,并导致我的5节点群集关闭:

select max(eventTime) from table1 group by id1, id2, field1

2 个答案:

答案 0 :(得分:0)

这里有两个注意事项。 1)您的columnstore表的分片键是什么? 2)您使用的是最新版本的MemSQL 6.5吗? 3)您是否查看了有关优化表数据结构的资源? https://www.memsql.com/static/memsql_whitepaper_optimizing_table_data_structures.pdf

确保columnstore键中所有查询的公共列可改善段消除。 如果按顺序插入数据(如时间戳记),则最好将该列放在columnstore键中的第一位,以最大程度地减少后台合并过程的工作。 如果组合键的键之一中有很多不同的值,请放在最后。首先将具有较低清晰度的关键部分放在第一位,以增加段消除将可能影响以后的列的可能性。

另外,如果运行运行,将会有所帮助 EXPLAIN select max(eventTime) from table1 group by id1, id2, field1; 这样我们就可以看到解释计划。

答案 1 :(得分:0)

这需要很长时间,因为它需要适当的数据库设计。因此,您必须将分片键选择为这三列(id1,id2,field1)。我建议对查询使用列存储,而不是行存储。