我有一个大约1.5亿条记录的数据集,每天生成的记录包含:
member_id
,member_name
,member_name_first_letter
我需要按member_name asc
如果我按照member_name的第一个字母细分并且每个人都运行一次查询(大约40个不同的:AZ,数字,特殊字符),我已经尝试使用MySQL。我能够在大约40分钟内填写表格,没有崩溃到后来它tkaes小时。对于测试,我只使用了1300万条记录。 无论如何,我需要更快地获得它们(目标:1-2分钟)。
我怎么能这样做? MongoDB能帮忙吗?
答案 0 :(得分:2)
如果你使用InnoDB,并使member_name成为表的主键,它将始终由该列隐式排序,因此你可以SELECT ... FROM members
没有order-by子句。 InnoDB表实际上是聚簇索引。
重新评论:您还可以定义复合主键,如果member_name是主键中的第一列,则表格将以member_name顺序排列。
答案 1 :(得分:0)
Mongo不是一个选项,尝试在member_name上使用索引,
其他解决方案是订购和数据并拆分为多个表或使用外部工具为member_name字段创建索引
答案 2 :(得分:0)
扩展Bill Karwin的想法,如果你可以在获取数据时添加新列,你可以通过在名称后附一个时间戳来生成一个唯一的主键,用空格隔开以避免任何奇怪的连接问题(很可能是任何人的名称将是数字,但仍然是)。