我有一个13亿行的表(MemSQL,列存储模式)。我需要在3个字段(id1,id2,text)上查询GROUP BY并获取每个3元组的最新记录。该表通过安装在EFS文件夹上的管道填充。目前,它有大约200k csv文件,每个2MB。
我需要帮助为这种情况编写优化查询,或者是否可以通过其他方式完成。
编辑:我无法在线找到任何博客/帮助,他们中的大多数都在谈论涉及创建额外表格的解决方案,这对我来说是不可能的(在这种情况下,内存使用非常繁重)。
像下面这样的东西不起作用,并将我的5节点集群关闭:
select max(eventTime) from table1 group by id1, id2, field1
这里有几个考虑因素。 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;
以便我们可以看到解释计划,那将有所帮助。
这需要很长时间,因为它需要适当的数据库设计。所以你必须选择分片键作为那三列(id1,id2,field1)。我建议对该查询使用列存储而不是行存储。