Mysql 在单个或多个表中处理数百万行?

Mysql 在单个或多个表中处理数百万行?,mysql,Mysql,我正在寻找那些使用大型数据库(>100GB)的人的一些经验 基本上,我有一个表,用于存储系统发送的所有消息(针对所有帐户)。每个星期,我们都会得到一份工作+新增100万行 此表开始出现一些查询问题。我了解如何适当地优化查询,并尝试了不同的索引组合。但我觉得一张桌子太贵了 其中一个使用范围条件的查询通常会杀死我们的数据库 根据您的经验,是否最好将此表拆分为多个表(每个帐户一个)?每个帐户都有自己的数据库,因此不难修改我们的软件 我想这将解决范围查询的问题,特别是对于

我正在寻找那些使用大型数据库(>100GB)的人的一些经验

基本上,我有一个表,用于存储系统发送的所有消息(针对所有帐户)。每个星期,我们都会得到一份工作+新增100万行

此表开始出现一些查询问题。我了解如何适当地优化查询,并尝试了不同的索引组合。但我觉得一张桌子太贵了

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

根据您的经验,是否最好将此表拆分为多个表(每个帐户一个)?每个帐户都有自己的数据库,因此不难修改我们的软件


我想这将解决范围查询的问题,特别是对于<5k行的小帐户。

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

一些有用的信息:

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

一些有用的信息:
我没有直接使用MySQL。我更喜欢SQL Server和Oracle。但我知道MySQL有,它打破了大表并将它们分布在文件中。您可以设置分区的规则以及分区的工作方式


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

我没有直接使用MySQL。我更喜欢SQL Server和Oracle。但我知道MySQL有,它打破了大表并将它们分布在文件中。您可以设置分区的规则以及分区的工作方式


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

在MySQL中手动分区表有点像雷区。一般来说,除非您可以将数据拆分为多个表,这些表将包含不同的数据类型(即,表将有一组完全不同的列),否则通常最好添加索引以使查询运行得更快。例外情况是,当您的数据集确实增长到足以容纳单个数据库时,此时(跨服务器)切分将有所帮助。

在MySQL中手动分区表有点像雷区。一般来说,除非您可以将数据拆分为多个表,这些表将包含不同的数据类型(即,表将有一组完全不同的列),否则通常最好添加索引以使查询运行得更快。例外情况是,当您的数据集确实增长到足以容纳单个数据库时,此时(跨服务器)分片将有所帮助。

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


另一个选择,因为我没有看到任何人提到它,是。虽然这是一项伟大的技术,如果使用得当,有助于扩大规模;随着碎片越来越多,响应时间也会出现问题。此外,根据每个元组(每行没有任何联接)存储的数据量,可以使用规范化技术将字段拆分为单独的表。不确定您的数据库在这方面走了多远,但只是一个建议。

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

另一个选择,因为我没有看到任何人提到它,是。虽然这是一项伟大的技术,如果使用得当,有助于扩大规模;随着碎片越来越多,响应时间也会出现问题。此外,根据每个元组(每行没有任何联接)存储的数据量,可以使用规范化技术将字段拆分为单独的表。不确定你的数据库在这方面走了多远,但只是一个建议