Re: Problemas para realizar update

From: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
To: Paola Alejandra de Montserrat Cordero Bon <paola(dot)cordero(dot)b(at)gmail(dot)com>
Cc: "Eduardo Arenas C(dot)" <edomax(at)gmail(dot)com>, Jaime Casanova <jaime(at)2ndquadrant(dot)com>, POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problemas para realizar update
Date: 2015-07-15 01:24:42
Message-ID: CANm+PCA38eRbmw+uUGnuEyncrk6Kgx37YY==rM8=fgQPi43oYg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola porque no pruebas con NOT EXISTS o con un LEFT JOIN buscando los nulos
del lado derecho?

El 14 de julio de 2015, 17:47, Paola Alejandra de Montserrat Cordero Bon <
paola(dot)cordero(dot)b(at)gmail(dot)com> escribió:

> Estimado:
>
> He realizado un index sobre la clave primaria, que es la que más consultas
> llevará. Cambie a otras tablas más pequeñas, del orden de 200.000 registros
> (tuplas)
>
> intentando esta instrucción
>
> select matriculados_2011.mrun from matriculados_2011 where
> matriculados_2011.mrun not in (select matriculados_2012.mrun from
> matriculados_2012) ;
>
> Que básicamente es seleccionar los casos en que un alumno aparece
> matriculado en un año y no en el siguiente...
>
> y la ejecucion demora mucho más de lo que me esperaba...
>
> sinceramente no le veo el error para que se demore tanto...
>
> Agradecería me puedan iluminar al respecto.
>
>
> El 7 de julio de 2015, 11:21, Eduardo Arenas C. <edomax(at)gmail(dot)com>
> escribió:
>
>> 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(dot)cordero(dot)b(at)gmail(dot)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 <jaime(at)2ndquadrant(dot)com>
>>> escribió:
>>>
>>>> 2015-06-29 17:58 GMT-05:00 Paola Alejandra de Montserrat Cordero Bon
>>>> <paola(dot)cordero(dot)b(at)gmail(dot)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
>>
>>
>>
>
>
> --
> Paola Alejandra de Montserrat Cordero Bon
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2015-07-15 02:25:29 Re: Problemas para realizar update
Previous Message Paola Alejandra de Montserrat Cordero Bon 2015-07-14 20:47:03 Re: Problemas para realizar update