PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

È meglio creare un indice prima di riempire una tabella con i dati o dopo che i dati sono a posto?

La creazione dell'indice dopo l'inserimento dei dati è un modo più efficiente (si consiglia spesso di eliminare l'indice prima dell'importazione batch e dopo l'importazione ricrearlo).

Esempio sintetico (PostgreSQL 9.1, macchina a sviluppo lento, un milione di righe):

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

Inserisci e quindi crea indice - circa 12 secondi

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

Crea indice e quindi inserisci - circa 25,5 secondi (più di due volte più lento)