Mise à jour MySQL: pourquoi les lignes apparié changement en fonction de la clause set?
Question
J'ai couru une requête de mise à jour se joindre à travers un grand nombre de tableaux qui met à jour un champ, et il correspondait 29k quelques impairs rangs. L'exécution de la même requête avec seulement un ajout dans la clause Set augmenté les lignes adaptées à 118K quelques impairs rangs. Il semble que cela ne devrait changer si la clause WHERE a été modifié.
La solution
Je crois que je viens tout compris ...
MySQL doit compter le nombre de lignes qui seront mises à jour, tous ceux qui seront générés par la jointure qui se produit au cours de la mise à jour. La différence est que s'il y a beaucoup [B] pour un [A], et beaucoup [C] pour un [B], se joindre à tous créeraient n ([C]) lignes, mais la mise à jour [B] ne ferait que compter n ( [B]). L'ajout d'un ensemble de [C] a fait ce nombre n ([B]) + n ([C]).
Étant donné que les champs de la clause set sont sur des tables différentes, il modifie le nombre mis à jour.