php – MySQL更新连接性能
发布时间:2020-12-13 15:55:57 所属栏目:PHP教程 来源:网络整理
导读:我需要根据另一个表中的列更新一个表中的多个列.首先,我只是更新其中一个.我尝试了两种方法,这两种方法都有效,但它们使用mySQL命令大约需要4分钟,而在php中运行则需要20多分钟.两个表都长约20,000行. 我的问题是,有更好或更有效的方法吗? 方法1: UPDATE ta
我需要根据另一个表中的列更新一个表中的多个列.首先,我只是更新其中一个.我尝试了两种方法,这两种方法都有效,但它们使用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 EXPLAIN和more info here. 在您的情况下,您没有任何索引(可能的键= null)强制MySQL进行全表扫描. 当缓慢是一个问题时,您应该始终对您的查询进行解释选择.您必须将非选择查询转换为选择,但这并不困难,只需列出select子句中的所有已更改字段,然后复制连接和where子句. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |