MYSQL删除匹配时更新中的行

MYSQL删除匹配时更新中的行,mysql,match,rows,Mysql,Match,Rows,我有一个小应用程序,需要使用另一个每天40000行的表更新40000行的表。此操作合并来自不同(外部)数据源的数据,以便在我工作的公司生成报告,这是我目前唯一可用的方法:( 现在我使用的查询格式如下 UPDATE table1, table2 SET table1.column1=table2.column1 WHERE table1.column2=table2.column2 这需要花费大量的时间来完成。这是一个40k到40k的比较,因此需要完成大约1600000个比较。如果可能的话,我可

我有一个小应用程序,需要使用另一个每天40000行的表更新40000行的表。此操作合并来自不同(外部)数据源的数据,以便在我工作的公司生成报告,这是我目前唯一可用的方法:(

现在我使用的查询格式如下

UPDATE table1, table2 SET table1.column1=table2.column1 WHERE table1.column2=table2.column2
这需要花费大量的时间来完成。这是一个40k到40k的比较,因此需要完成大约1600000个比较。如果可能的话,我可以创建一个查询,指示SQL在匹配时从作业中删除行吗?因此,每次匹配/更新时,40k行会减少一行

我可以通过将原始表复制到临时表并在更新结果表后删除具有相同键的行来重现这种情况,但也许有一种更优雅和/或更快的方法:)

谢谢你的见解


/编辑-正确-应该是“更新”而不是“选择”:)要从表中删除行,需要DELETE语句;这会让事情变得更慢,而不是更快

<>为了提高更新的性能,考虑添加适当的索引。最好的候选者可能是覆盖指数:

... ON table2 (column2, column1)
这将使“匹配”(查找column2的值)更快。如果索引中有column1的值,则可以直接从索引返回该值,而无需再次查找基础表中页面中的行

关于减少需要执行的比较操作的数量,您的想法是正确的。这就是索引存在的理由;通过显著减少需要执行的比较数量,它们使比较操作更快。索引的组织方式消除了绝大多数比较;我们不需要比较每一行中的每一个值,索引以一种数据库可以快速确定不需要检查整条行的方式组织这些值,因为数据库知道该条带中的任何行都不可能与其查找的值匹配



我想您的意思是运行的是
UPDATE
语句,而不是
SELECT

,您可能会发现在两个表的第2列上添加索引会大大缩短时间。我还认为你们的选择应该是一个更新:-)你们改变了我的生活。。。我使用的查询通常需要25分钟才能完成。对于索引,它需要不到一秒钟的时间。。。我对自己缺乏基本知识感到谦卑和惊讶。。。