2

我有 8 个表,超过 200 万行使用 INT(4B) PK 用于频繁插入和读取。较旧的 9/10 数据偶尔会被读取,无论访问它需要多长时间,而较新的 1/10 对于 INSERT 和 SELECT 都必须快速。这些表格分为 2 类要求:

  1. 100 次插入/秒
  2. 20 INSERTs/sec,偶尔更新

因为它应该使用设置为 32M 的 innodb_buffer_pool_size 并且旧数据并不重要,所以我认为最好的解决方案是每周一次将每个表的旧一半复制到大型存档表中。另外,我应该使用 infile 插入而不是当前事务。这是一个很好的解决方案吗?我将不胜感激有关此问题的任何建议和链接。

4

1 回答 1

3

如果您使用 InnoDB,数据自然会使用表的 PRIMARY KEY “聚集”,如果您定义了一个(即:“id INT NOT NULL PRIMARY KEY AUTO_INCREMENT”),则数据按 ID 分组(并将保持方式)。

因此,您最近的 INSERTed 数据自然地分组在一些 InnoDB 缓冲区中,而您的旧存档数据根本无关紧要。我认为您不会从将数据拆分为存档表/数据库和最近的数据中受益,除非您会使一切变得更加复杂!

为了加快 InnoDB 上的插入/更新/删除,您必须考虑 InnoDB 日志文件的物理位置:InnoDB 需要将修改插入其中以实现操作(无论是显式事务还是隐式事务!) ,它不会等待数据或索引被放回磁盘。这是一个与 MyISAM 完全不同的策略。

因此,如果您可以为 InnoDB 日志文件、10krpm+ 硬盘驱动器或 SSD 分配快速顺序存储,并将 ibdata 保存在另一个驱动器或 RAID 阵列中,您将能够维持大量的 DB 修改:它是 IO 绑定的在 InnoDB 日志文件上(例外是您在更新/删除时使用复杂或繁重的 where 子句)。

于 2012-08-30T02:18:05.737 回答