2011-07-22 77 views
1

我正在寻找与大数据库(> 100GB)合作过的人的一些经验。在单个或多个表中处理数百万行?

基本上我有一个表,存储系统发送的所有消息,所有帐户。每个星期,我们都会得到aprox。新增+1百万行。

此表开始给某些查询带来问题。我了解如何正确优化查询并尝试不同的索引组合。但我认为这对一张桌子来说太过分了。

其中一个使用范围条件的查询通常会杀死我们的数据库。

从您的经验来看,将此表分成几个表格(每个帐户一个)会更好吗?每个帐户都有自己的数据库,因此修改我们的软件并不难。

我想这将解决我们的问题与远程查询,特别是对于具有< 5k行的小型账户。

回答

1

我还没有与MySQL直接合作。我更像是一名SQL Server和Oracle人员。但我知道MySQL有table partitioning,它打破了大表并将它们分布在文件中。您可以将规则设置为分区以及它如何工作。

您可以尝试做的另一个提示是将您的数据分成一个存档表。例如,在您的后端,如果您需要按日期搜索邮件,并且日期范围超过了特定时间,则后端会在归档表中进行搜索。否则,它在主表中搜索。这将允许您存档旧信息。

0

MySQL通常更快地处理多个表而不是一个表。如果您可以将数据拆分成部分(一个表中的用户,另一个表中的每个用户的操作等),它通常会更快。需要注意的是,如果您决定将数据拆分为多个表,则必须将它们与ID一起连接。

一些有用的信息: http://dev.mysql.com/doc/refman/5.1/en/multiple-tables.html

0

在MySQL中手动分区表是一个雷区。一般来说,除非你可以将你的数据分割成多个表格,这些表格将包含不同的类型数据(即具有明显不同列的表格),通常最好添加索引以使查询运行得更快。例外情况是,当你的数据集真正增长到足够大的数量时,对于单个数据库来说太多了,这时分片(跨服务器)将会有所帮助。

0

虽然我不太明白,但是您说每个帐户都有自己的数据库,但是您正在考虑按帐户划分为单独的表格?

另一种选择,因为我还没有见过任何人提到它,所以是sharding。虽然这是一项伟大的技术,并且如果使用得当可以帮助扩展;随着你越来越多地分解,响应时间也会出现问题。另外,根据每个元组存储多少数据(每行没有任何联接),您可以使用规范化技术将这些字段拆分为单独的表。不知道你的数据库有多远,但只是一个建议。

相关问题