PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

É melhor criar um índice antes de preencher uma tabela com dados ou depois que os dados estiverem no lugar?


A criação de índice após a inserção de dados é a maneira mais eficiente (muitas vezes é recomendável descartar o índice antes da importação em lote e, após a importação, recriá-lo).

Exemplo sintético (PostgreSQL 9.1, máquina de desenvolvimento lento, um milhão de linhas):
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

Insira e crie o índice - cerca 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

Crie o índice e insira - cerca de 25,5 segundos (mais de duas vezes mais lento)