Mettre à jour efficacement les tables MySQL avec les valeurs d'une autre table
Face à la nécessité de mettre à jour une table MySQL avec les informations d'une autre basée uniquement sur valeurs partagées, une approche courante consiste à utiliser un JOIN. Cependant, pour obtenir des performances optimales avec de telles requêtes, il faut y réfléchir attentivement.
Supposons que vous disposiez de deux tables avec les structures suivantes :
Original :
id | value |
---|---|
1 | hello |
2 | fortune |
3 | my |
4 | old |
5 | friend |
à mettre à jour :
uniqueid | id | value |
---|---|---|
1 | NULL | something |
2 | NULL | anything |
3 | NULL | old |
4 | NULL | friend |
5 | NULL | fortune |
Votre objectif est de mettre à jour la colonne id pour qu'elle soit mise à jour en fonction de la valeur correspondante dans l'original. Bien que la requête suivante puisse sembler simple :
UPDATE tobeupdated, original SET tobeupdated.id = original.id WHERE tobeupdated.value = original.value
elle peut être extrêmement lente, en particulier avec de grandes tables. En effet, MySQL doit effectuer une analyse complète des tables sur les deux tables pour trouver les lignes correspondantes.
Optimisation des performances
Pour améliorer les performances, une approche plus efficace consiste à utiliser un JOIN avec une clause ON :
UPDATE tobeupdated INNER JOIN original ON (tobeupdated.value = original.value) SET tobeupdated.id = original.id
En utilisant un INNER JOIN, MySQL ne prend en compte que les lignes correspondantes des deux tables. De plus, garantir que les index existent sur les colonnes de valeurs dans les deux tables peut réduire considérablement le temps requis pour la recherche.
Syntaxe simplifiée
Pour les requêtes avec des noms de clé identiques dans les deux tables, une clause USING peut être utilisée pour plus de simplicité :
UPDATE tobeupdated INNER JOIN original USING (value) SET tobeupdated.id = original.id
Supplémentaire Considérations
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!