Re: Consulta complejas

From: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
To: "Eduardo Arenas C(dot)" <edomax(at)gmail(dot)com>, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta complejas
Date: 2012-04-13 14:33:52
Message-ID: 1334327632.80241.YahooMailNeo@web171001.mail.ukl.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Por favor no olvidar crear los indices en las llaves foráneas de las tablas que tienen muchos registros.

>________________________________
> De: Eduardo Arenas C. <edomax(at)gmail(dot)com>
>Para: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
>Enviado: Viernes 13 de abril de 2012 0:06
>Asunto: Re: [pgsql-es-ayuda] Consulta complejas
>
>
>Victor, antes de modificar cualquier parámetro, yo revisaría la query primero. 
>
>
>Yo veo estas haciendo muchos join , pero lo estas haciendo sobre todos los registros en vez de selecionar solo los datos que necesitas hacer tus calculos, agruparlos y luego hacer los join a los datos ya a grupados. No se si me doy a entender pero es diferente hacer un join a una tabla de 8 millones de registros hacia varias otras tablas maestras, que tomar primero la tabla de 8 millones agruparla y hacer cálculos, que te va a dar como resultado un set menor de datos, y a este set de datos menor le pegas todas las columnas que necesitas  con joins.  Entonces creo que necesitas estructurar con sub querys tu consulta para que sea mas óptima. Además al set de datos que agrupes obviamente correrá mas rápido si los atributos están indexados.
>
>
>debería quedar algo como (es un ejemplo no funcional):
>
>
>select * 
>   from
>              (
>                 select a.*,b,c,d,e 
>                    from (select *,sum(),count() from existencias group by 1,2,3) as a
>                      left join ... b    --otras tablas, donde igual puedes hacer calculos para minimizar el set de datos para hacer un left join.
>                      left join     c    
>                      left join    d 
>                      left join      e
>               ) as a
>
>Lo otro que veo son unos trim entre medio, lo mismo de arriba si aplicas esto a los 8 millones de registros igual va ser costoso, no se por que tienes que hacer eso?, si tu aplicación genera algunos blancos quizás es mejor sacar esos blancos con un proceso nocturno habitual, o corregir en la aplicación que está generando blancos, ojo que si haces un trim ahi el índice del atributo no sirve de mucho.
>
>
>Por último, esto donde lo cargas? en una aplicación? o lo llevas a una planilla de cálculo?, si lo llevas a una planilla de cálculos quizás no es necesario pedir al motor que ordene eso lo puedes hacer en tu planilla o en la aplicación desde el código.
>
>
>Espero esto te sirva para optimizar tu consulta
>
>
>saludos
>
>
>Eduardo Arenas
>
>
>
>2012/4/12 Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
>
>
>>Excerpts from ViBaSoft's message of jue abr 12 23:33:28 -0300 2012:
>>
>>
>>> Revise pero prácticamente no comprendo el resultado, si veo que en factura y facturas son los que mas tardan y eso es lo que quiero optimizar
>>
>>Esto es más ilegible aún.  ¿Por qué no mandas la URL mejor?
>>
>>
>>--
>>Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
>>-
>>Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
>>Para cambiar tu suscripción:
>>http://www.postgresql.org/mailpref/pgsql-es-ayuda
>>
>
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message ruben avila galindo 2012-04-13 22:22:30 MERGE entre Base de Datos
Previous Message Pablo Siciliano 2012-04-13 13:21:12 Re: Pgpool y postgresql 8.1