150M按名称记录订单

时间:2011-09-16 01:30:32

标签: sql rdbms large-data

我有一个大约1.5亿条记录的数据集,每天生成的记录包含: member_idmember_namemember_name_first_letter

我需要按member_name asc

排序

如果我按照member_name的第一个字母细分并且每个人都运行一次查询(大约40个不同的:AZ,数字,特殊字符),我已经尝试使用MySQL。我能够在大约40分钟内填写表格,没有崩溃到后来它tkaes小时。对于测试,我只使用了1300万条记录。 无论如何,我需要更快地获得它们(目标:1-2分钟)。

我怎么能这样做? MongoDB能帮忙吗?

3 个答案:

答案 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的想法,如果你可以在获取数据时添加新列,你可以通过在名称后附一个时间戳来生成一个唯一的主键,用空格隔开以避免任何奇怪的连接问题(很可能是任何人的名称将是数字,但仍然是)。