Dans mon application, je fais des insertions à plusieurs lignes lorsque je le peux simplement parce que cela réduit le nombre d'aller-retour entre la base de données et l'application.
Cependant, j'étais curieux, y a-t-il d'autres avantages? Par exemple, si plusieurs lignes sont insérées en même temps comme ceci:
insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)
contre:
insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)
et la table a un indice, l'indice est-il calculé une fois dans le premier cas et deux fois dans le deuxième cas? Ou est-ce toujours une fois par insert? Supposons que les deux requêtes se trouvent dans la même transaction.
J'utilise PostgreSQL.
postgresql
index
optimization
cdmckay
la source
la source
Réponses:
Je pense que @a_horse_with_no_name a raison de dire que l'index est mis à jour une fois par instruction, car si l'instruction n'a pas terminé son exécution, les données ne seront pas visibles car elles sont en transaction. Et la définition d'une déclaration comprend avoir plusieurs valeurs
Et accoriding aux docs ici la création d'index / mise à jour fonctionne plus efficace avec des lots que des déclarations simples.
Il y a aussi un bel article de Peter Manis sur les performances des différentes méthodes d'insertion que je peux recommander.
Une autre chose à garder à l'esprit est l'
FILLFACTOR
indice, car il a un impact sur les performances, comme le décrit ici Fabien Coelho .la source
Je ne pense pas qu'il existe actuellement des différences d'optimisation dans le domaine de la maintenance des index à cet égard.
En plus de la charge du réseau, les autres avantages de la déclaration de valeurs multiples sont dans l'analyse syntaxique, de verrouillage, etc. (Même si le verrou de table sur
tbl
est prise par la première instruction d'insertion, puis maintenue dans le reste de la transaction, chaque insert doit encore vérifier que le verrou est maintenu, et cette vérification n'est pas gratuite)la source