Re: listado complejo...o engorroso

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: suso <jlcubas(at)terra(dot)es>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: listado complejo...o engorroso
Date: 2011-08-02 01:31:27
Message-ID: 1312248332-sup-4040@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Excerpts from suso's message of sáb jul 30 12:53:08 -0400 2011:
> Hola de nuevo a todos, tengo una duda (para no variar).
>
> Tengo que hacer un listado procedente de 33 tablas, en total son como 680 campos, de los cuales el médico puede seleccionar unos de una tabla, otros de otra, no necesariamente todas las tablas pueden estar envueltas, así como pueden o no ser todos los campos.
>
> Los datos que se deben obtener (al final) son sólo unos 10 como mucho (al menos por ahora y de una sola tabla), los datos (campos) obtenidos inicialmente debe ser uno sólo (cod_pac), puede haber de ese campo desde 0 hasta "x" registros.
>
> Ese cod_pac lo proceso al final con los datos de una sola tabla(la parte más sencilla).
>
> El problema es que debo coger la tabla de la que se obtenga menos registros en base a la selección de cada tabla.
> Es decir, la tabla A, tiene 10 campos(por ejemplo) y sus criterios de búsqueda, la tabla B, 50 campos y otros criterios, y así.
> Mi pregunta es , ¿ debo procesar primero cada tabla por separado para saber cual es la que menos registros cod_pac tiene en base a sus criterios de selección, y después hacer una consulta anidada tomando como inicio esa tabla( digamos que hacer el listado 2 veces), o hay otra manera menos "rebuscada" y que consuma menos recursos del server?, lo cual llevaría un tiempo.., no serán en total muchos registros, como 20 o 50.000 máximo creo.
> Evidentemente, no los traería todos de golpe, pero ese es otro tema

Tu idea es reimplementar el optimizador a mano, del lado del cliente.
Creo que no es muy buena, porque es mucho trabajo y seguramente
resultará lento.

Me parece que sería más práctico formar una consulta genérica que sea
capaz de atender una selección genérica, y usar una versión de Postgres
que sea capaz de hacer eliminación de joins.

http://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.0#Join_Removal
http://akretschmer.blogspot.com/2010/02/join-removal-short-performance-test.html

Quizás no resulte hacerlo para las 33 tablas (no lo he intentado), pero
quizás te puedas arreglar para manejar los subconjuntos más comunes.

--
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Rolando Sabatino 2011-08-02 02:03:04 Agrupamiento (group by - hashtable)
Previous Message Diana Lilia Rodríguez Cruz 2011-08-01 14:03:21 Peticion para ser parte de la comunidad postgres