使用唯一索引来限制MySQL中每列的行数

时间:2012-10-21 07:42:32

标签: mysql indexing

我有一个非常大的MySQL表,它太大而不能频繁查询(500米+行)。我所做的是将我需要的结果缓存在另一个名为“recent”的表中。

在“recent”表中,架构看起来像这样

USER_ID

PAGE_ID

DISPLAY_ORDER

我在USER_ID和DISPLAY_ORDER上放了一个唯一索引,因为我只想在此表中为每个用户存储多达64条记录。因此,DISPLAY_ORDER只是一个最多为64的int。使用REPLACE INTO更新行。

这是一个好方法吗?或者,如果用户超过64行,我应该定期从表中删除数据。我需要考虑性能。在接下来的几个月中,5亿的主表将增长到10亿,每个用户64行,这意味着“最近的”表也将非常大......

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果我是你,我会认真考虑转移到大数据NoSQL数据库。像Cassandra或HBase这样的东西,它们都具有很好的性能和大量的数据。让5-10个集群节点通过MapReduce为您完成工作,而不是一个巨大的单片服务器试图扫描并搜索那么多记录。

答案 1 :(得分:0)

我同意eggyal和Todd Nakamura
eggyal :对您的数据进行分区 处理大型数据集时,您确实需要对数据进行分区,这样您就有机会对数据的子集运行查询。

Todd Nakamura :研究不同的数据库技术 这个问题看起来像NoSQL数据存储将是一个很好的解决方案。它将允许非常大的数据集,并能够使用Map / Reduce(Hadoop)来对查询进行并行化。