我必须从 MySQL 的 InnoDB 表中删除大约 2800 万条记录。我想知道如果我在删除操作期间在同一个表上执行 select 语句会发生什么。我想删除需要一些时间才能完成。
我使用的是 MySQL 5.6 版。我不想删除所有我将有条件或可能拥有的记录。感谢您的时间。
与其删除大部分行,不如取消 WHERE 条件并将剩余的行插入/选择到新表中。然后删除原始表并将新表重命名为旧表(或截断并重新插入)。这样,只有一个非常小的时间段 (DROP/RENAME) 表不可用。这是数据仓库中一个非常常见的过程,您可以在其中处理大量行。
您需要在单个事务中同时运行 INSERT/SELECT 和 DROP TABLE,因此没有其他会话能够在 INSER 和 DROP 之间执行任何 DML。我不知道确切的 mySQL/InnoDb 语法和事务行为,但这是一个骨架(当然你需要先测试):
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; --
START TRANSACTION;
LOCK TABLES newTab WRITE;
INSERT INTO newTab SELECT * FROM oldTab;
DROP TABLE oldTab; -- might need a COMMIT?;
RENAME newTab TO oldTab;
COMMIT; -- ?
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5339 次 |
最近记录: |