J’ai appris cette astuce après avoir roulé un profileur SQL pour analyser la performance d’une tâche en lot.
Dans la base de données, une colonne Recherche (Lookup) est conservée en trois morceaux : le nom, l’id et le nom de schéma de l’entité. Quand le nom d’une entité est mis à jour, une cascade est déclenchée pour changer le nom pour chaque champ Recherche. Le cas le plus problématique est celui du Compte. Étant le coeur du système, ceci peut facilement causer une cinquantaine de transactions. Alors, multiplié par le nombre de comptes mis à jour, le total grimpe vite.
Pour éviter cela, il est recommandé de vérifier si la valeur est la même avant de mettre à jour. Si vous utilisez le connecteur KingswaySoft, il y une case qui s’appelle «Ignore Unchanged Fields». Ceci va ajouter une requête avant chaque mise à jour, pour comparer la valeur des colonnes. Très utile dans ce cas-ci ou pour éviter de déclencher un plugin pour rien.
À noter que lorsque vous profilez, il faut éteindre le service Async pour réduire le nombre de transactions sur la ligne. Il questionne sans cesse le serveur. Alors, si vous êtes seul sur le serveur, vous ne verrez que vos transactions.