PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Est-il préférable de créer un index avant de remplir une table avec des données, ou une fois que les données sont en place ?

Créer un index après l'insertion de données est un moyen plus efficace (il est même souvent recommandé de supprimer l'index avant l'importation par lots et de le recréer après l'importation).

Exemple synthétique (PostgreSQL 9.1, machine à développement lent, un million de lignes) :

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

Insérer puis créer un index - environ 12 secondes

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

Créer un index puis insérer - environ 25,5 secondes (plus de deux fois plus lent)