我在 MySQL 数据库中有一个 2000 万条记录表。SELECT 的工作速度非常快,因为我设置了良好的索引,但是 INSERT 和 UPDATE 操作变得非常慢。数据库是负载较重的 Web 应用程序的后端。INSERTs 和 UPDATEs 真的很慢,因为这个表上有大约 5 个索引,现在索引大小约为 1GB - 我想计算需要很长时间。
为了解决这个问题,我决定对表进行分区。我运行 MySQL 4,无法升级(无法直接控制服务器),所以我将进行手动分区 - 为每个部分创建一个单独的表。
数据集由大约 18000 个不同的逻辑切片组成,可以完全单独查询。因此,我可以创建 18000 个名为(maindata1、maindata2 等)的表。但是,我不确定这是最佳的方式吗?除了当我想要手动执行某项操作时我必须在管理工具中浏览 18000 个项目这一显而易见的事实之外,我还担心文件系统性能。文件系统是 ext3。我不确定在包含 36000 个文件(有数据文件和索引文件)的目录中定位文件的速度有多快。
如果这是一个问题,我可以将一些数据片连接到同一个表中。例如:maindata10、maindata20 等,其中 maindata10 将包含切片 1、2、3...10。如果我选择 10 人的“组”,我将只有 1800 张桌子。如果我将 20 人分组,我将获得 900 张桌子。
我想知道这个分组的最佳大小是多少,即目录中的文件数与表大小?
编辑:我还想知道使用多个单独的数据库将文件分组在一起是否是个好主意。因此,即使我有 18000 个表,我也可以将它们分组到 30 个数据库中,每个数据库有 600 个表。这似乎更容易管理。我不知道拥有多个数据库是否会增加或减少性能或内存占用(虽然它会使备份和恢复复杂化)