par
Hubert Roksor » 24 nov. 2006, 16:16
En fait on
peut envoyer plusieurs requêtes à la fois avec mysqli_multi_query() ou utiliser de manière détournée des variantes de INSERT INTO ... ON DUPLICATE KEY UPDATE mais ce n'est pas vraiment plus performant en étant sérieusement plus compliqué à déboguer. Si tu as de nombreuses mises à jour (quelques centaines au plus) à effectuer, je recommande d'utiliser des requêtes préparées (voir mysqli_prepare()) sous
MySQLi
Je ne sais pas si c'est une bonne idée de le suggérer, mais il existe une méthode qui peut être plus efficace dans certains cas (plusieurs centaines ou milliers d'UPDATE) c'est de remplacer les UPDATE par des INSERT. Deux façons de procéder : soit tu crées une table temporaire, tu fais un gros INSERT multi-enregistrement dedans puis tu fais un UPDATE multi-table. Soit, dans certains cas
très spécifiques (dizaines de milliers d'UPDATE ?) tu crées une nouvelle table, un gros INSERT des nouvelles valeurs puis un INSERT IGNORE pour compléter avec les anciens enregistrements. Après ça, tu RENAME TABLE pour échanger le nom des tables et tu DROP TABLE la table originale. Je ne mentionne cette technique que pour la beauté du sport, ces techniques ne sont adaptées qu'à un très très faible nombre de cas.
En fait on [i]peut[/i] envoyer plusieurs requêtes à la fois avec mysqli_multi_query() ou utiliser de manière détournée des variantes de INSERT INTO ... ON DUPLICATE KEY UPDATE mais ce n'est pas vraiment plus performant en étant sérieusement plus compliqué à déboguer. Si tu as de nombreuses mises à jour (quelques centaines au plus) à effectuer, je recommande d'utiliser des requêtes préparées (voir mysqli_prepare()) sous [url=http://php.net/mysqli]MySQLi[/url]
Je ne sais pas si c'est une bonne idée de le suggérer, mais il existe une méthode qui peut être plus efficace dans certains cas (plusieurs centaines ou milliers d'UPDATE) c'est de remplacer les UPDATE par des INSERT. Deux façons de procéder : soit tu crées une table temporaire, tu fais un gros INSERT multi-enregistrement dedans puis tu fais un UPDATE multi-table. Soit, dans certains cas [b]très spécifiques[/b] (dizaines de milliers d'UPDATE ?) tu crées une nouvelle table, un gros INSERT des nouvelles valeurs puis un INSERT IGNORE pour compléter avec les anciens enregistrements. Après ça, tu RENAME TABLE pour échanger le nom des tables et tu DROP TABLE la table originale. Je ne mentionne cette technique que pour la beauté du sport, ces techniques ne sont adaptées qu'à un très très faible nombre de cas.