PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ist es besser, einen Index zu erstellen, bevor eine Tabelle mit Daten gefüllt wird, oder nachdem die Daten vorhanden sind?

Das Erstellen des Index nach dem Einfügen von Daten ist effizienter (es wird sogar oft empfohlen, den Index vor dem Stapelimport zu löschen und ihn nach dem Import neu zu erstellen).

Synthetisches Beispiel (PostgreSQL 9.1, langsame Entwicklungsmaschine, eine Million Zeilen):

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

Index einfügen und dann erstellen - ca. 12 Sek.

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

Index erstellen und dann einfügen - ca. 25,5 Sek. (mehr als zweimal langsamer)