Paola, algunos tips: - indexa los campos por los que estas haciendo el where em ambas tablas, - Intenta que ninguna de las tablas tenga valores nulos en los id que estas utilizando en el where - si los id esta en formato integer la cosa este tipo de actualizaciones corre bastante mas rápido. - quizás el <> te esta haciendo mas demoras la consulta. quizás puedes hacer una tabla temporal que filtre esta condición antes para que tu update sea mas limpio.
Saludos Eduardo El 1 de julio de 2015, 9:10 p. m., Paola Alejandra de Montserrat Cordero Bon <paola.corder...@gmail.com> escribió: > estimados: > > Gracias por el aporte de Jaime Casanova pude avanzar un poco, veras ahora > sólo estoy intentando hacerle un update a una sola variable. Esta es la > situación, son tres tablas, tabla 1, tabla 2 y tabla 3 en promedio cada > una tiene 3.500.000 de tuplas, comparten en común una variable llamada > mrun (clave primaria en todas). Tabla2 y tabla3 tienen las mismas columnas > y nombres de variables. Tabla1 tiene las variables de tabla2 con 6 > variables adicionales más, siendo la que quiero hacerle el update una de > ellas. > La idea es que esta variable, a la que le quiero hacer el update, tome > valores 1 si tabla.mrun = tabla2.mrun y tabla2.mrun no existe en > tabla3.mrun o tome valores 0 si tabla1.mrun = tabla2.mrun y tabla2.mrun > existe en tabla3.mrun > > > Ahora bien,he probado con varias consultas, y actualmente estoy probando > con esta: > > update tabla3 set variable=1 where exists (select tabla2.mrun, tabla3.mrun > from tabla2, tabla3 where tabla1.mrun = tabla2.mrun and > tabla2.mrun<>tabla3.mrun) > > Pero después de cuatro horas de procesamiento (aún sin detenerse) entiendo > que algo no anda bien. > > Por eso apelo a su experiencia porque necesito verificar que se este > haciendo bien y optimizar la consulta ...desde ya muchisimas gracias..... > > El 29 de junio de 2015, 22:56, Jaime Casanova <ja...@2ndquadrant.com> > escribió: > >> 2015-06-29 17:58 GMT-05:00 Paola Alejandra de Montserrat Cordero Bon >> <paola.corder...@gmail.com>: >> > Buenas noches comunidad, les pido ayuda sobre una operación de >> > actualización. Tengo dos tablas, tabla 1, tabla 2, tienen en común >> varias >> > variables, quedando fuera cuatro que estan en la segunda tabla (tabla >> 2). >> > Hice una tercera tabla, tabla 3, donde le cargue la información >> completa de >> > la tabla 1, quedando pendiente actualizar con las variables no comunes >> de la >> > tabla 2. >> > >> > Use los siguientes comandos: >> > >> > Para insertar los datos en común: insert into tabla_3 (variable1, ... >> > variable_n) select variable1, ... variable_n from tabla_1 TODO Bien >> acá... >> > >> > Para actualizar estos usando el siguiente comando: update tabla_3 set >> > (variable1, variable2, variable3, variable4) = (variable1, variable2, >> > variable3, variable4 from tabla_2 where tabla_2.variable1 = >> > tabla_3.variable1) >> > >> >> UPDATE tabla_3 >> SET variable_1 = tabla_2.variable_1, >> variable_2 = tabla_2.variable_2, >> ... >> variable_n = tabla_2.variable_n >> FROM tabla_2 >> WHERE tabla_2.variable_1 = tabla_3.variable_1; >> >> >> fijate en el FROM, aunque lo que quieres hacer debería ser lo >> correcto postgres aun no lo implementa y por eso existe la posibilidad >> *NO* estandar de usar la clausula FROM en el UPDATE. >> >> en la versión 9.5 me parece que se podrá hacer como se debería. >> >> -- >> Jaime Casanova www.2ndQuadrant.com >> Professional PostgreSQL: Soporte 24x7 y capacitación >> > > > > -- > Paola Alejandra de Montserrat Cordero Bon > -- Eduardo Arenas +56 0 9 6629 1618