Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 这是更新表的错误方法吗_Mysql_Sql - Fatal编程技术网

Mysql 这是更新表的错误方法吗

Mysql 这是更新表的错误方法吗,mysql,sql,Mysql,Sql,我编写这段代码是为了尝试用表b的q_id值更新表a的q_id列。我觉得这样做效率很低,而且是错误的做法,因为它需要很长时间才能运行。有更好的方法吗 UPDATE tbl1 a,tbl2 b SET a.q_id = b.q_id WHERE a.col IS NOT NULL AND a.col = b.col 您的查询相当于: UPDATE tbl1 a JOIN tbl2 b ON a.col = b.col SET a.q_id = b.q

我编写这段代码是为了尝试用表b的q_id值更新表a的q_id列。我觉得这样做效率很低,而且是错误的做法,因为它需要很长时间才能运行。有更好的方法吗

UPDATE tbl1 a,tbl2 b
SET a.q_id = b.q_id
WHERE   a.col IS NOT NULL
AND     a.col = b.col

您的查询相当于:

UPDATE tbl1 a JOIN
       tbl2 b
       ON a.col = b.col
    SET a.q_id = b.q_id;
不需要与
NULL
进行比较

但是,这无助于提高性能。
tbl2(q\u id,col)
上的索引应该对性能有很大帮助


如果要更新很多行(比如数十万行或更多行),则必须处理日志记录问题。在这种情况下,将更新分解为多个步骤可能是明智的选择。另外,如果tbl1中的每条记录都有多个匹配项,那么这也可能会减慢查询速度。

通过“将更新分为多个步骤”,您的意思是在有限的数据集上运行更新吗?@mucle6。基本上是的。但这只适用于大量的更新。
UPDATE tbl1 tb1 JOIN tbl2 tb2 ON tb1.col = tb2.col SET tb1.q_id = tb2.q_id;