El día 3 de agosto de 2010 18:43, Alvaro Herrera
<[email protected]> escribió:
> Excerpts from anxusgo's message of lun ago 02 05:11:19 -0400 2010:
>>
>> Hola:
>>
>> Antes de nada, gracias por su atención. Les informo acerca del problema que 
>> tengo con una consulta que pretendo realizar en una base de datos creada en 
>> Postgre. Primero, hago constar que soy totalmente nuevo en el uso, manejo y 
>> administración de Postgre.
>
> Lo que primero me pregunto es qué tanta experiencia tienes manejando el
> modelo relacional.  La verdad es que no me queda claro qué es lo que
> quieres lograr con esto.
>
>> A partir de ellas, pretendo crear la siguiente consulta:
>>
>> INSERT INTO iteracion1 SELECT 
>> tabla_enlaces_rev_rev_nodupl_agrup.idrev_origen, 
>> tabla_enlaces_rev_rev_nodupl_agrup.idrev_destino, 
>> tabla_enlaces_iteracion1.id_cat, tabla_enlaces_rev_rev_nodupl_agrup.valor
>> FROM tabla_enlaces_iteracion1 INNER JOIN tabla_enlaces_rev_rev_nodupl_agrup 
>> ON tabla_enlaces_iteracion1.id_rev = 
>> tabla_enlaces_rev_rev_nodupl_agrup.idrev_destino
>
> Mostraste iteracion1 en vez de tabla_enlaces_iteracion1.  En cualquier
> caso las consultas son más legibles si usas unos pocos alias
> juiciosamente, por ej:
>
>  INSERT INTO iteracion1 SELECT ter.idrev_origen, ter.idrev_destino, 
> tei.id_cat, ter.valor
>  FROM tabla_enlaces_iteracion1 AS tei INNER JOIN 
> tabla_enlaces_rev_rev_nodupl_agrup AS ter ON tei.id_rev = ter.idrev_destino
>
>> CREATE TABLE iteracion1
>> (
>>   idrev_origen double precision,
>>   idrev_destino double precision,
>>   id_cat integer,
>>   valor integer
>> )
>> WITH (
>>   OIDS=FALSE
>> )
>>
>> El problema por el que les pido ayuda es que al ejecutarse la consulta (cuyo 
>> fin es almacenar la información en la tabla iteracion1), si bien, el 
>> funcionamiento es completamente correcto, el consumo de espacio físico en el 
>> disco duro es bestial, correspondiendo aproximádamente a unos 20 Gb por cada 
>> 8 millones de registros almacenados (aproximádamente). No soy un usuario 
>> experto en el mundo de las bases de datos, pero me parece que este consumo 
>> de espacio es exagerado para una tabla que únicamente contiene números.
>
> Vamos a ver, cada tupla tiene 24 bytes de datos (8 por cada double
> precision y 4 por cada integer), o sea como 52 bytes una vez almacenado
> contando el encabezado y el line pointer; entonces en cada página de
> 8192 bytes caben unos 157 registros.  Siendo generosos dejémoslo en 160.
> Entonces, 8 millones de registros ocupan 50000 páginas, o sea como 390 MB.
> Claramente hay algo mal, ¿quizás sea mi aritmética?   ¿O quizás tu
> consulta hace un producto cartesiano por algún motivo?
>
> Lo más fácil es quitar el INSERT INTO y ver si la cantidad de registros
> devueltos coincide con tus expectativas.
>


La otra posibilidad es que no esté vacía previamente o haya hecho un
"delete" de la tabla en vez de truncarla.
Silvio
-
Enviado a la lista de correo pgsql-es-ayuda ([email protected])
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a