如何高效地检查不同数据库中MySql表之间的4m行数据
我试图检查一个表(db2.table2)中的一列(username2)中的数据是否位于另一个表(db1.table1)中的另一列(username2)中。如果不是,则在db2.table2中的“usernametake”列中输入“No” 这就是我尝试过的:如何高效地检查不同数据库中MySql表之间的4m行数据,mysql,Mysql,我试图检查一个表(db2.table2)中的一列(username2)中的数据是否位于另一个表(db1.table1)中的另一列(username2)中。如果不是,则在db2.table2中的“usernametake”列中输入“No” 这就是我尝试过的: UPDATE table2 SET usernametaken = "No" WHERE db2.table2.username2 NOT IN (SELECT username1 FROM db1.table1) 在初始测试中(添加了限
UPDATE table2 SET usernametaken = "No" WHERE db2.table2.username2 NOT IN (SELECT username1 FROM db1.table1)
在初始测试中(添加了限值2),添加了“否”的两个单元格是正确的。这花了467.1423秒
然后我在4mn+行(表2)和100mn行(表1)上完全运行它。它运行了3天,我不得不通过停止MySQL来强制终止它。当我查看表2时,UsernameTake列中没有添加任何数据(即“否”)
显然有些地方不对劲,即使有一些结果,这个查询肯定不是完成这项工作的最佳方式。如果有人能帮助改进查询,那就太好了
我刚试过这个:
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秒。)
因此,当我设置限制时,所需的行似乎会受到影响。然而,这仍然需要很长的时间。。。1126秒/8行*4mn行=563mn秒=6516天