对具有大量插入和删除的表进行MySQL分区

时间:2012-06-13 18:02:07

标签: mysql innodb database-partitioning

我有一张桌子,我们每天插入大约2000万个条目(盲目插入,没有任何限制)。我们有两个外键,其中一个是一个带有大约1000万个条目的表的引用ID。

我打算删除此表中超过一个月的所有数据,因为不再需要此数据。但问题是,如果发生大量插入,如果我开始删除,表将被锁定并且插入将被阻止。

我想知道我们是否可以根据月份在表格上使用分区。这样,我希望当我尝试删除超过2个月的所有数据时,这些数据应该在不同的分区中,并且插入应该在不同的分区中发生,并且删除锁定不会阻止读取锁定。 / p>

请告诉我这是否可行。我对使用DB很新,所以如果我的想法有问题,请告诉我。

2 个答案:

答案 0 :(得分:1)

来自MySQL documentation

  

对于 InnoDB 和BDB表,MySQL仅在您使用表锁定时使用   使用LOCK TABLES显式锁定表。对于这些存储引擎,   完全避免使用LOCK TABLES,因为InnoDB使用自动   行级锁定和BDB使用页面级锁定来确保   交易隔离。

我不确定你是否有问题。你有没有对此进行测试并看到过锁定问题,或者你现在只是在理论化它们?

答案 1 :(得分:0)

MySQL从版本5.1开始进行分区。

您可以运行此查询以验证您的MySQL版本是否支持分区:

SHOW VARIABLES LIKE 'have_partitioning';

然后您可以阅读手册以了解如何使用它:

http://dev.mysql.com/doc/refman/5.5/en/partitioning.html