Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何高效地检查不同数据库中MySql表之间的4m行数据_Mysql - Fatal编程技术网

如何高效地检查不同数据库中MySql表之间的4m行数据

如何高效地检查不同数据库中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) 在初始测试中(添加了限

我试图检查一个表(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) 
在初始测试中(添加了限值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天