sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Es mejor crear un índice antes de llenar una tabla con datos o después de que los datos estén en su lugar?

Crear un índice después de la inserción de datos es una forma más eficiente (incluso a menudo se recomienda eliminar el índice antes de la importación por lotes y volver a crearlo después de la importación).

Ejemplo sintético (PostgreSQL 9.1, máquina de desarrollo lento, un millón de filas):

CREATE TABLE test1(id serial, x integer);
INSERT INTO test1(id, x) SELECT x.id, x.id*100 FROM generate_series(1,1000000) AS x(id);
-- Time: 7816.561 ms
CREATE INDEX test1_x ON test1 (x);
-- Time: 4183.614 ms

Insertar y luego crear índice - alrededor de 12 segundos

CREATE TABLE test2(id serial, x integer);
CREATE INDEX test2_x ON test2 (x);
-- Time: 2.315 ms
INSERT INTO test2(id, x) SELECT x.id, x.id*100 FROM generate_series(1,1000000) AS x(id);
-- Time: 25399.460 ms

Crear índice y luego insertar:aproximadamente 25,5 segundos (más de dos veces más lento)