【发布时间】:2011-02-21 13:41:37
【问题描述】:
我基本上是在尝试这样做:
INSERT INTO stuff_to_archive
SELECT a.id FROM stuff a INNER JOIN items b ON a.b_id = b.id AND (other conditions on b)
基本上,“东西”变得太大了,我想每晚归档旧记录。 Stuff_to_archive 具有要归档的记录的 ID,我稍后将其用作辅助以确保创建和删除相同的记录。我试图在不锁定“东西”或“项目”的情况下做到这一点,所以我的网站的其余部分可以继续工作。
我正在加入项目,因为项目包含有关我可以归档哪些“资料”记录的信息。现在,与此查询匹配的所有记录(在两个表中)都不会被写入。两个表都一直添加新记录,并且“项目”更新了记录,但没有我匹配的记录(因为这些记录很旧并且不再触及)
Stuff 和 Items 是 InnoDB。 Stuff_to_archive 是 MEMORY。
有什么方法可以运行该查询而不阻塞其他对东西和项目的读/写? 我试过了
set SESSION transaction isolation level READ UNCOMMITTED;
但这似乎仍然阻止了一切。
这个 INSERT 在 stuff_to_archive 表中创建了大约 200 万条记录。
有什么方法可以在不阻塞其他查询的情况下进行此 INSERT?
谢谢!
丹尼尔
【问题讨论】:
标签: mysql performance locking