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.corder...@gmail.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. <edo...@gmail.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.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 >> >> >> > > > -- > Paola Alejandra de Montserrat Cordero Bon >