我正在尝试检查来自表(db2.table2)的列(username2)中的数据是否位于另一个表(db1.table1)的另一列(username2)中。如果不是,则在db2.table2的“usernametaken”列中输入“否”。
这就是我尝试过的:
UPDATE table2 SET usernametaken = "No" WHERE db2.table2.username2 NOT IN (SELECT username1 FROM db1.table1)
在初始测试中(添加了LIMIT 2),添加“否”的2个细胞是正确的。它花了467.1423秒。
然后我在4mn +行(table2)和100m行(table1)上完全运行它。它运行了3天,我不得不通过停止MySQL强制终止它。当我查看table2时,没有任何数据(即'No')添加到usernametaken列中。
显然有些事情是不对的,即使有一些结果,这个查询肯定不是完成这项工作的最佳方法。如果有人能够提供如何改进查询的话会很棒。
我刚试过这个:
ALTER TABLE db2.table2 ADD INDEX covering_index (username2, usernametaken);
UPDATE table2 SET usernametaken = "No" WHERE db2.table2.username2 NOT IN (SELECT username1 FROM db1.table1) LIMIT 10
...刚刚得到了结果......影响了8行。 (查询花了1126.1817秒。)
因此,当我将LIMIT置于适当位置时,所需的行似乎会受到影响。但是,它仍然需要太长时间... 1126秒/ 8行* 4mn行= 563mn秒= 6516天。