1

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

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

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

请告诉我这是否可能。我对使用数据库相当陌生,所以如果我的想法有问题,请告诉我。

4

2 回答 2

1

来自MySQL 文档

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

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

于 2012-06-13T18:07:31.243 回答
0

MySQL 从 5.1 版开始具有分区功能。

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

SHOW VARIABLES LIKE 'have_partitioning';

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

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

于 2012-06-13T18:16:46.387 回答