单个MySQL查找每个不同的行集

时间:2013-06-06 20:41:28

标签: mysql join foreach

我有一个包含5万亿行的表,但在A列中只有大约9000个不同的值,并且需要使用另一个表中的查找来填充另一列(B)。 我需要运行类似的东西:

UPDATE t SET t.B=(SELECT lookupValue FROM lookuptable WHERE b.lookupKey = X) WHERE t.A=X

其中X表示每个不同的9000值。

是否有单个查询可以执行此操作,或者我是否必须在应用程序或存储过程中执行操作?

我试着马上做了这件事:

UPDATE t SET B=(SELECT lookupValue FROM lookuptable WHERE b.lookupKey = t.A)

但这会对5Million行中的每一行进行查找并花费太长时间(如果查找需要一秒钟,那就是〜5Million秒,而不是9000秒)。

1 个答案:

答案 0 :(得分:3)

尝试使用INNER JOIN查询,它应该更快

UPDATE t 
INNER JOIN lookuptable b
ON b.lookupKey = t.A
SET t.B= b.lookupValue