微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – MySQL更新连接性能

我需要根据另一个表中的列更新一个表中的多个列.首先,我只是更新其中一个.我尝试了两种方法,这两种方法都有效,但它们使用MySQL命令大约需要4分钟,而在PHP中运行则需要20多分钟.两个表都长约20,000行.

我的问题是,有更好或更有效的方法吗?

方法1:

   UPDATE table_a,table_b 
   SET table_a.price = table_b.price 
   WHERE table_a.product_code=table_b.product_code

方法2:

   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)

解决方法:

如果查询运行缓慢,则必须检查查询正在使用的数据.

您的查询如下所示:

UPDATE table_a INNER JOIN table_b 
ON table_a.product_code = table_b.product_code
SET table_a.price=table_b.price

为了看看你可以做什么延迟

EXPLAIN SELECT a.price, b.price FROM table_b b
INNER JOIN table_a a ON (a.product_code = b.product_code)

这将告诉您是否正在使用索引,请参阅the info on EXPLAINmore info here.

在您的情况下,您没有任何索引(可能的键= null)强制MysqL进行全表扫描.

当缓慢是一个问题时,您应该始终对您的查询进行解释选择.您必须将非选择查询转换为选择,但这并不困难,只需列出select子句中的所有已更改字段,然后复制连接和where子句.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐