Mysql 为数据库表分区选择哪个粒度?

Mysql 为数据库表分区选择哪个粒度?,mysql,partitioning,ext3,Mysql,Partitioning,Ext3,我在MySQL数据库中有一个2000万记录表。SELECT的工作速度非常快,因为我已经设置了很好的索引,但是INSERT和UPDATE操作变得非常慢。数据库是web应用程序的后端,负载很重。插入和更新速度非常慢,因为这个表上有大约5个索引,现在索引大小约为1GB——我想计算起来需要很多时间 为了解决这个问题,我决定对一个表进行分区。我运行MySQL 4,无法升级(无法直接控制服务器),所以我将进行手动分区——为每个部分创建一个单独的表 数据集由大约18000个不同的逻辑片组成,可以完全单独查询。

我在MySQL数据库中有一个2000万记录表。SELECT的工作速度非常快,因为我已经设置了很好的索引,但是INSERT和UPDATE操作变得非常慢。数据库是web应用程序的后端,负载很重。插入和更新速度非常慢,因为这个表上有大约5个索引,现在索引大小约为1GB——我想计算起来需要很多时间

为了解决这个问题,我决定对一个表进行分区。我运行MySQL 4,无法升级(无法直接控制服务器),所以我将进行手动分区——为每个部分创建一个单独的表

数据集由大约18000个不同的逻辑片组成,可以完全单独查询。因此,我可以创建18000个名为(maindat1、maindat2等)的表。然而,我不确定这是不是最好的方法呢?除了一个显而易见的事实,即每当我想手动执行某些操作时,我必须浏览管理工具中的18000项之外,我还关心文件系统的性能。文件系统是ext3。我不确定在一个包含36000个文件(有数据文件和索引文件)的目录中查找文件的速度有多快

如果这是一个问题,我可以将一些数据片段连接到同一个表中。例如:maindata10、maindata20等,其中maindata10将包含片1、2、3…10。如果我选择10人一组,我只有1800张桌子。如果我分组20,我会得到900张桌子

我想知道这个分组的最佳大小是什么,即目录中的文件数与表大小


编辑:我还想知道使用多个单独的数据库将文件分组是否是一个好主意。所以,即使我有18000个表,我也可以将它们分组,比如说,30个数据库,每个数据库有600个表。这似乎更容易管理。我不知道拥有多个数据库是否会增加或减少性能或内存占用(但会使备份和恢复复杂化)

您可以采用一些策略来提高性能。我假设“分区”是指“具有相同列布局但不同数据内容的表的版本”

如果可能的话,找一台运行mySQL 5的服务器。它在这方面更快更好,足以让您在升级后不会出现问题

你在使用InnoDB吗?如果是这样,你能换成myISAM吗?(如果需要严格的事务完整性,则可能无法切换)

对于分区,您可能会尝试找出哪种数据片组合将为您提供大致相同大小的分区(按行数)。如果我是你,我会选择不超过20个分区,除非你能证明你需要


如果只有少数数据切片被积极更新(例如,如果它们是“本月的数据”和“上个月的数据”),我可能会考虑将它们分割成更小的切片。例如,您可能会有“本周的数据”、“上周的”和“前一周”。“在他们自己的分区中。然后,当分区冷却后,复制它们的数据并将它们合并到更大的组中,如“前四分之一”。这有一个缺点,即需要运行常规的周日晚间维护作业。但它的优点是大多数或所有更新只发生在表的一小部分上。

如果使用myISAM,您应该查看合并引擎,这样您可以获得与mysql5分区几乎相同的功能,您将能够运行与现在运行的相同的select。

是的,表的结构相同,但数据不同。我用的是myISAM。