From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | josefermin54 <josefermin54(at)hotmail(dot)com> |
Cc: | Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: insertar registros e indice de una tabla |
Date: | 2011-03-23 21:18:08 |
Message-ID: | 1300913515-sup-7562@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Excerpts from josefermin54's message of mié mar 23 14:53:41 -0300 2011:
>
> Buenas tardes amigos, mi pregunta de hoy es acerca de una tabla a la que se van a insertar 2 millones de registros provenientes de un archivo de texto, ahora bien en esa tabla se creo un indice para hacer las búsquedas más ágiles, pero, antes de crear el índice la insercción de registros se hacía con una muy rapidez buena (en una hora se insertaron 600 mil registros y ahora con el índice en una hora sólo se pudieron insertar 23 mil registros). Mi pregunta es tiene que ver algo el índice creado con la rapidez de insercción. Y si existe de alguna forma de poder insertar registros con más rapidez desde un archivo de texto.
> Sistema operativo utilizado: Windows 7Postgresql 8.4Método utilizado: btreecampo al que se le creó índice: codigocantidad de índices en la tabla: 1En el momento último de insercción de registros solo estaba utilizando: pgadmin y el programa para insertar registros desde el archivo de texto.
Algo anda profundamente mal con tu sistema. Acá hice una prueba rápida:
primero creo un archivo de texto con un millón de líneas. Luego creo
una tabla, sin índices, y le inserto con COPY las líneas desde el
archivo. Se demora 8 segundos. Luego trunco la tabla, creo un índice,
vuelvo a insertar el mismo millón de registros. Se demora 17 segundos.
Esta es una máquina de escritorio que no tiene nada del otro mundo.
$ seq 1 1000000 > /tmp/unmillon
$ ls -l /tmp/unmillon
-rw-r--r-- 1 alvherre alvherre 6888896 mar 23 17:52 /tmp/unmillon
alvherre=# create table unmillon (a int);
CREATE TABLE
alvherre=# \timing
El despliegue de duración está activado.
alvherre=# copy unmillon from '/tmp/unmillon';
COPY 1000000
Duración: 8488,785 ms
alvherre=# truncate table unmillon;
TRUNCATE TABLE
Duración: 54,189 ms
alvherre=# create index f on unmillon (a);
CREATE INDEX
Duración: 141,347 ms
alvherre=# copy unmillon from '/tmp/unmillon';
COPY 1000000
Duración: 17252,609 ms
Repetí la inserción varias veces sin truncate para ver cómo cambiaban
los tiempos, y se fueron haciendo progresivamente peores pero no mucho
(como se espera):
alvherre=# truncate table unmillon ;
TRUNCATE TABLE
Duración: 55,474 ms
alvherre=# copy unmillon from '/tmp/unmillon';
COPY 1000000
Duración: 12552,902 ms
alvherre=# commit;
COMMIT
Duración: 74,718 ms
alvherre=# copy unmillon from '/tmp/unmillon';
COPY 1000000
Duración: 25170,691 ms
alvherre=# copy unmillon from '/tmp/unmillon';
COPY 1000000
Duración: 21487,533 ms
alvherre=# copy unmillon from '/tmp/unmillon';
COPY 1000000
Duración: 28824,152 ms
alvherre=# copy unmillon from '/tmp/unmillon';
COPY 1000000
Duración: 30203,438 ms
alvherre=# copy unmillon from '/tmp/unmillon';
COPY 1000000
Duración: 27992,940 ms
--
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
From | Date | Subject | |
---|---|---|---|
Next Message | Angelo Astorga | 2011-03-23 21:27:29 | Re: Exponer procedimientos almacenados como web services |
Previous Message | Jose David Verbel Tous | 2011-03-23 20:58:14 | Re: Problemas con COPY |