Est-ce que quelqu'un sait ce qui serait plus efficace et utiliser moins de ressources:performances MySQL: insertion imbriqué/clé en double vs plusieurs mises à jour
Méthode 1 - Utilisation d'une instruction SELECT unique pour obtenir des données d'une table, puis itérer à travers elle pour exécuter plusieurs UPDATEs sur une autre table. PAR EXEMPLE. (Pseudo-code, exécution() exécute la requête):
Query1_resultset = execute("SELECT item_id, sum(views) as view_count FROM tableA WHERE condition=1");
while(Query1_resultset as row) {
execute("UPDATE tableB SET view_count=row.view_count WHERE id=row.item_id");
}
Méthode 2 - Utilisez un INSERT .. sur instruction UPDATE DUPLICATE KEY avec une instruction SELECT imbriquée. .: par exemple
INSERT INTO tableB (id, view_count) SELECT item_id, SUM(views) as view_count FROM tableA WHERE condition=1 ON DUPLICATE KEY UPDATE view_count=VALUES(view_count);
Note: ID sur tableB est une clé primaire. Il n'y aura pas d'INSERTS car je sais que la clé existera. Donc, tout est UPDATEs. Juste en utilisant cette instruction pour transmettre une seule requête plutôt que plusieurs.
Je suis vraiment curieux de savoir pourquoi l'un ou l'autre serait plus efficace. Est-ce le nombre de requêtes qui détermine la rapidité d'exécution? Où est le goulot d'étranglement? Je cherche quelque chose qui va évoluer (le nombre de lignes mises à jour augmente chaque jour).
Des idées?
Merci