Mysql 将文本从一个表插入到另一个表中

Mysql 将文本从一个表插入到另一个表中,mysql,sql,Mysql,Sql,我很确定我做得对,但我的查询已经在普通笔记本电脑上的MySQL数据库上运行了半个小时了。“tweets”表只有100万条记录 我想要什么?考虑表“AAA”(左)和“BBB”(右) 我想用表B中的文本填充表A的“文本”列: UPDATE AAA SET `text` = ( SELECT `text` AS `text` FROM BBB WHERE id_str = AAA.id_str LIMIT 1 ) 所以那张桌子看起来像 id_str text ---

我很确定我做得对,但我的查询已经在普通笔记本电脑上的MySQL数据库上运行了半个小时了。“tweets”表只有100万条记录

我想要什么?考虑表“AAA”(左)和“BBB”(右)

我想用表B中的文本填充表A的“文本”列:

UPDATE AAA
SET `text` = (
    SELECT `text` AS `text`
    FROM BBB
    WHERE id_str = AAA.id_str
    LIMIT 1
)
所以那张桌子看起来像

id_str  text
-------------------
13      foo bar baz
14      foobar

然而,正如前面所说,这个查询运行的时间太长了。我是否在语法上犯了错误?

如果我正确理解了您的情况,这应该会快得多:

UPDATE AAA, BBB
SET AAA.`text` = BBB.text
WHERE BBB.id_str = AAA.id_str
UPDATE `AAA`,`BBB` SET `AAA`.`text`=`BBB`.`text`
WHERE `AAA`.`id_str`=`BBB`.`id_str`
您应该只需要运行此查询一次。这可能仍然需要几分钟,但这样做(使用连接)可能仍然比运行100万个单独的查询快得多

AAA
id\u str
BBB
id\u str
都应该被索引,最好是相同的数据类型,例如两者都应该是int(11)。这允许MySQL以最大效率评估它们之间的平等关系

编辑:正如我所说,根据您的系统配置和硬件,上面概述的查询可能仍需要一些时间(操作可能是磁盘绑定的,即受硬盘速度的限制)。这也可能是因为MySQL必须更新表
AAA
中的索引-您能否为表
AAA
演示一个
createtable
语句?或者,您可以尝试以下方法:

CREATE TABLE `CCC` LIKE `AAA`;
INSERT INTO `CCC` SELECT `AAA`.`str_id`,`BBB`.`text` FROM `AAA` JOIN `BBB` ON `AAA`.`id` = `BBB`.`id`;

但是,这不会从旧表
AAA
中复制任何数据。

一种方法是选择值作为
text
,然后使用
text
插入表B,因为插入的值可以
AAA
可能包含在
BBB
中不匹配的行?如果是,是否要确保这些行中的
text
值为空?AAA不可能包含在BBB中没有匹配项的stru id。相反-如示例所示,BBB可以包含具有相同str_id的重复记录集。考虑到您的提示,我现在正在运行此查询,但现在仍然需要大约15分钟。问题可能是BBB中有相同id_str的重复条目(参见开篇文章中的示例)?不应该是问题…我刚刚编辑到答案中的内容的性能如何?我的错-我说得太快了。我忘了在AAA.str_id上添加索引。在添加索引后,查询大约在20秒内完成!谢谢:-)不客气!感谢您让我们知道您发现了问题:)
CREATE TABLE `CCC` LIKE `AAA`;
INSERT INTO `CCC` SELECT `AAA`.`str_id`,`BBB`.`text` FROM `AAA` JOIN `BBB` ON `AAA`.`id` = `BBB`.`id`;