Estou criando uma tabela no PostgreSQL e carrego em massa com os dados primeiro. A documentação do PostgreSQL recomenda primeiro inserir grandes volumes de dados e depois criar índices e restrições de chave estrangeira. E quanto às restrições de verificação? É melhor criá-los antes de inserir os dados iniciais ou depois? Ou isso importa?
Por exemplo, uma tabela terá um índice em time
, NOT NULL
restrição nela, verificação de restrição no intervalo de tempo e possivelmente em device
. Se não houver carregamento em massa, a definição será:
CREATE TABLE conditions(
time timestamptz NOT NULL,
device int,
value float,
CONSTRAINT cond_time CHECK ("time" >= '2020-01-16 01:00:00+01'::timestamp with time zone
AND "time" < '2020-01-23 01:00:00+01'::timestamp with time zone),
CONSTRAINT cond_device CHECK (my_hash_function(device) >= 1073741823
AND my_hash_function(device) < 1075441823)
);
CREATE INDEX conditions_time_index ON conditions(time);
O índice será criado após o volume. Os dados para carregamento em massa são limpos e atendem às restrições. As restrições são necessárias no futuro durante as operações normais.
Será mais eficiente se as restrições de verificação e NULL NOT
forem criadas antes do carregamento em massa ou depois? Importa se um índice existirá na coluna de destino na restrição de verificação?