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
