我有两个表T1和T2,并希望从T2更新T1的一个字段,其中T2保存海量数据。 什么更有效? 在值上循环迭代中更新T1 要么 左边用T2连接并更新。
请注意我在shell脚本中更新这些表
答案 0 :(得分:0)
通常,JOIN总是比循环更好。如果正确编制索引,则大小不应成为问题。
答案 1 :(得分:0)
没有简单的答案会更有效,它将取决于您要一次更新的表格大小和数据大小。
假设您正在使用innodb引擎并尝试一次更新1,000个或更多行,并且有2个重表连接,这是非常频繁的,那么它在生产服务器上不是一个好主意,因为它会锁定您的表一段时间由于此锁定,您的生产服务器上也可能会遇到其他一些操作。
选项1:如果您尝试更新几行并基于正确的索引字段(首选基于主键),那么您可以选择加入。
选项2:如果您尝试基于多个表加入更新大量数据,那么下面的选项会更好:
步骤1:创建存储过程。
步骤2:在游标中保留以下查询结果。
假设您要更新TABLE table1的TABLE table2 IN field1的相应field2 DATA:
SELECT a.primary_key,b.field2 FROM table1 a JOIN table2 b ON a.primary_key=b.foreign_key WHERE [place CONDITION here IF any...];
步骤3:现在使用游标中的存储值,逐个主键更新所有行。
步骤4:您可以从脚本中调用此存储过程。