使用另一张表中的值高效更新 MySQL 表
当需要仅基于一个 MySQL 表的信息来更新另一个表时共享值,常见的方法是使用 JOIN。但是,通过此类查询实现最佳性能需要仔细考虑。
假设您有两个具有以下结构的表:
原始:
id | value |
---|---|
1 | hello |
2 | fortune |
3 | my |
4 | old |
5 | friend |
待更新:
uniqueid | id | value |
---|---|---|
1 | NULL | something |
2 | NULL | anything |
3 | NULL | old |
4 | NULL | friend |
5 | NULL | fortune |
你的目标是根据original中的相应值更新tobeupdated中的id列。虽然以下查询可能看起来很简单:
UPDATE tobeupdated, original SET tobeupdated.id = original.id WHERE tobeupdated.value = original.value
它可能非常慢,尤其是对于大型表。这是因为 MySQL 必须对两个表执行全表扫描才能找到匹配的行。
性能优化
为了提高性能,更有效的方法是使用带有 ON 子句的 JOIN:
UPDATE tobeupdated INNER JOIN original ON (tobeupdated.value = original.value) SET tobeupdated.id = original.id
通过使用 INNER JOIN,MySQL 仅考虑两个表中的匹配行。此外,确保两个表中的值列上都存在索引可以显着减少搜索所需的时间。
简化语法
对于在为简单起见,可以使用两个表中的 USING 子句:
UPDATE tobeupdated INNER JOIN original USING (value) SET tobeupdated.id = original.id
其他注意事项
以上是如何使用 JOIN 有效地使用另一个表中的数据更新 MySQL 表?的详细内容。更多信息请关注PHP中文网其他相关文章!