valores update una tabla registros registro otra datos copiar con actualizar mysql sql

update - Actualice una tabla MySQL con valores de otra



copiar registros de una tabla a otra mysql (2)

Depende del uso de esas tablas, pero puede considerar colocar el activador en la tabla original al insertar y actualizar. Cuando finalice la inserción o actualización, actualice la segunda tabla basándose en un solo elemento de la tabla original. Será más rápido.

Estoy tratando de actualizar una tabla MySQL basada en información de otra.

Mi tabla original se ve así:

id | value ------------ 1 | hello 2 | fortune 3 | my 4 | old 5 | friend

Y la tabla tobeupdated se ve así:

uniqueid | id | value --------------------- 1 | | something 2 | | anything 3 | | old 4 | | friend 5 | | fortune

Quiero actualizar el id en tobeupdated con el id del original función del value (cadenas almacenadas en el campo VARCHAR(32) ).

La tabla actualizada se verá como:

uniqueid | id | value --------------------- 1 | | something 2 | | anything 3 | 4 | old 4 | 5 | friend 5 | 2 | fortune

Tengo una consulta que funciona, pero es muy lenta:

UPDATE tobeupdated, original SET tobeupdated.id = original.id WHERE tobeupdated.value = original.value

Esto maximiza mi CPU y finalmente conduce a un tiempo de espera con solo una fracción de las actualizaciones realizadas (hay varios miles de valores para que coincidan). Sé que igualar por value será lento, pero este es el único dato que tengo para unirlos.

¿Hay alguna forma mejor de actualizar valores como este? Podría crear una tercera tabla para los resultados combinados, si eso fuera más rápido?

Intenté MySQL - ¿Cómo puedo actualizar una tabla con valores de otra tabla? , pero realmente no ayudó. ¿Algunas ideas?

¡Gracias de antemano por ayudar a un principiante de MySQL!


UPDATE tobeupdated INNER JOIN original ON (tobeupdated.value = original.value) SET tobeupdated.id = original.id

Eso debería hacerlo, y realmente está haciendo exactamente lo que es tuyo. Sin embargo, prefiero la sintaxis ''JOIN'' para las uniones en lugar de varias condiciones ''WHERE'', creo que es más fácil de leer

En cuanto a correr lento, ¿qué tan grandes son las tablas? Debería tener los índices en los tobeupdated.value y original.value

EDITAR: también podemos simplificar la consulta

UPDATE tobeupdated INNER JOIN original USING (value) SET tobeupdated.id = original.id

USING es una abreviatura cuando ambas tablas de un join tienen una key nombre idéntico, como id . es decir, un equi-join - http://en.wikipedia.org/wiki/Join_(SQL)#Equi-join