No meu aplicativo, insiro várias linhas quando posso, apenas porque reduz o número de viagens de ida e volta entre o banco de dados e o aplicativo.
No entanto, fiquei curioso, existem outras vantagens? Por exemplo, se várias linhas forem inseridas ao mesmo tempo assim:
insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)
versus:
insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)
e a tabela possui um índice, o índice é calculado uma vez no primeiro caso e duas vezes no segundo caso? Ou é sempre uma vez por inserção? Suponha que ambas as consultas estejam na mesma transação.
Estou usando o PostgreSQL.
postgresql
index
optimization
cdmckay
fonte
fonte
Respostas:
Acho que @a_horse_with_no_name está certo quanto ao fato de o índice ser atualizado uma vez por instrução, porque se a instrução não concluir sua execução, os dados não estarão visíveis, pois estão em transação. E a definição de uma declaração inclui ter vários valores
E, de acordo com os documentos aqui, a criação / atualização de índice funciona mais eficiente com lotes do que com instruções únicas.
Há também um bom artigo de Peter Manis sobre o desempenho de vários métodos de inserção que posso recomendar.
Outra coisa a ter em mente é o
FILLFACTOR
índice, pois tem um impacto no desempenho, como Fabien Coelho descreve aqui .fonte
Não acredito que atualmente haja diferenças de otimização na área de manutenção de índice a esse respeito.
Além da sobrecarga de rede, as outras vantagens da instrução de vários valores estão na análise, bloqueio, etc. (Embora o bloqueio da tabela
tbl
seja assumido pela primeira instrução de inserção e depois mantido durante o restante da transação, cada inserção A instrução ainda precisa verificar se o bloqueio está retido e essa verificação não é gratuita)fonte