Récemment, j’ai cherché à optimiser un workflow qui traite 55 millions d’enregistrements en 1heure.
En utilisant l’outil de profiling (voir le tip de @WilliamR: Tips de la semaine (3.1):Améliorer la performance de son workflow), j’ai découvert qu’une des fonctions les plus gourmandes était une « batch macro » qui itérait 150 fois.
Cette « batch macro » qui s’exécute en approximativement 17 secondes contient un filtre « complexe » (c.à.d. avec 2 conditions liées par un « AND ») qui représente la majorité du temps de traitement.
Sur les conseils de @WilliamR, j’ai converti ce filtre « complexe » en une suite de 2 filtres simples et voici les résultats en terme de performance :
Sur 55 millions d’enregistrements, 1 itération de la batch macro :
Filtre 1
Filtre 2
Temps
d’exécution (secondes)
Variable texte = condition AND Variable numérique != 0
Non
17,1
Variable texte = condition
Variable numérique != 0
16,1
Variable numérique != 0
Variable texte = condition
13,1
Soit un gain de 30% en mettant 2 filtres simples en cascades… et en prenant soin de mettre le type de donnée le plus simple (numérique) avant le filtre sur la variable « chaine » qui est, de façon logique, plus lent en exécution.
Comme souvent, les solutions « élégantes » (ici filtre complexe) ne sont pas toujours les plus performantes !
Afficher l'article complet