【发布时间】:2015-07-29 08:04:56
【问题描述】:
我需要根据另一个表中的列更新一个表中的多个列。首先,我只是更新其中一个。我尝试了 2 种方法,这两种方法都有效,但使用 mySQL 命令大约需要 4 分钟,而在 php 中运行时需要 20 多分钟。这两个表的长度约为 20,000 行。
我的问题是,有没有更好或更有效的方法?
方法一:
UPDATE table_a,table_b
SET table_a.price = table_b.price
WHERE table_a.product_code=table_b.product_code
方法二:
UPDATE table_a INNER JOIN table_b
ON table_a.product_code = table_b.product_code
SET table_a.price=table_b.price
我猜这些基本上以相同的方式工作,但我认为连接会更有效。 product_code 列是随机文本,尽管它是唯一的,并且每一行都与另一个表中的一个匹配。
还有什么我可以尝试的吗?
谢谢
更新:这已通过创建索引来解决,例如
CREATE UNIQUE INDEX index_code on table_a (product_code)
CREATE UNIQUE INDEX index_code on table_b (product_code)
【问题讨论】:
-
您的 ID 列是否已编入索引?
-
它们都是一样的。在第一个查询上运行 EXPLAIN EXTENDED,然后是 SHOW WARNINGS;
-
它们并不完全相同,因为其中一个是设置 id,另一个是设置价格。隐式和显式连接语法在性能上没有区别
-
抱歉来晚了,他们都定了价格,上面已经编辑过了。所以他们都匹配了ID,然后在table_a中从table_b设置价格。
-
@fbas 索引提示是我所需要的(在 SQL 课程上还没有那么远!) - 创建和更新时间从 4 分钟缩短到不到 1 秒。谢谢
标签: php mysql performance join