L'utilisation de Mysql pour faire de multiples INSÉRER sur des tables liées
J'ai deux tables, l'une liée à la Clé Primaire de l'autre. Au moment où je l'INSÉRER dans Une table, obtenir le LAST_INSERT_ID, et ensuite l'INSÉRER dans la table B.
Mais j'ai des centaines de documents à insérer et je veux accélérer les choses.
Dans Mysql, vous pouvez soit:
INSERT INTO table_a (v1, v2, c3) VALUE (0, 1, 2);
INSERT INTO table_a (v1, v2, v3) VALUE (4, 5, 6);
etc, ou
INSERT INTO table_a (v1, v2, v3) VALUE (0, 1, 2), (4, 5, 6), etc
pour ajouter plusieurs entrées plus rapide - mais pour une seule table.
Bien sûr, cette dernière est beaucoup plus rapide. Je me demandais si il était possible de reproduire ce comportement pour mon exemple, avec deux tables liées à l'aide d'une Procédure Stockée, et qu'il aurait même une amélioration spectaculaire des performances:
quelque chose comme: appel special_insert((0, 1, 2), (4, 5, 6), etc); ou similaire.
Je n'ai aucune Procédure Stockée expérience, donc je suis de pêche pour des idées sur la direction à procéder.
Eh bien, en écrivant mon propre Procédure Stockée je voudrais savoir ce que les données dans la liste des paramètres signifierait... Serait le SP être nettement plus rapide que les INSERTS?
Je ne sais pas de manière significative. Vous auriez à comparer les deux méthodes, mais à la fin, si vous souhaitez toujours être de faire deux inserts et ne peut pas obtenir autour de qui fait.
OriginalL'auteur Michael Franze | 2012-04-09
Vous devez vous connecter pour publier un commentaire.
Voici un exemple d'un magasin de procédure avec deux table insert, y compris Last_Insert_ID().
Non, quelle que soit la langue que vous utilisez doit appeler le PS à chaque fois, c'est une itération à travers le tableau.
OriginalL'auteur eabraham
Après une enquête, il apparaît que si l'espagne n'aurait pas offrir d'importantes améliorations de la vitesse et ne peut pas accepter en bloc de paramètres comme l'INSÉRER DANS
MySQL Procédure Stockée vs requête complexe
Mais j'ai encore besoin d'insérer un assez grand nombre d'enregistrements liés dans l'un j'ai donc fait la suivante:
INSÉRER DANS un (x, y) les VALEURS (1,2), (3,4), (5,6), ... (N-1, N)
id = GET_LAST INSERT_ID
id de gamme à partir de l'id d'id+N tant que nous utilisons les tables InnoDB:
MySQL LAST_INSERT_ID() est utilisé avec plusieurs dossiers instruction INSERT
MySQL LAST_INSERT_ID() est utilisé avec plusieurs dossiers instruction INSERT
http://gtowey.blogspot.com/2012/02/multi-insert-and-lastinsertid.html
et puis
INSÉRER DANS b (a_id, z) VALUES (id,2), (id+1,4), (id+2,6), ... (id+N, 11)
seulement, gotcha est que vous devez savoir de votre serveur mysql incrément incrément de la réplication.
OriginalL'auteur Michael Franze