Bonjour tout le monde,
Permettez moi de vous présenter mes meilleurs voeux pour cette année 2007.
Ceci étant fait, je vous présenet mon problème:
Après 2 longues heures de développement j'ai développé une procédure utilisant 2 curseurs sur la même table.
En updatant cette table 15 fois a chaque combinaison des curseurs après 15 tests "if".
Résultat: Sur une table de 13500 lignes = 13 jours de traitement continue (calcul approximatif !!!)
Beaucoup de personnes sur ce forum ne sont pas fan des curseurs et certains m'ont déjà conseillé dans utilisé qu'1.
Mais mon probème est que je sors des données pas à pas à chaque combinaison ligne1boucle1 ligne1boucle2 / ligne1boucle1 ligne2boulce2 .....
13500*13500= 182 250 000 fois 15 tests + update et insert de données.
Je sais que ca parait relativement abstrait de lire ceci, mais si je met le code (172 lignes) j'ai peur de perdre la moité des gens connectés sur ce forum.
Le but de cette procédure est, de comparer charactère par charactère (identique plus place dans la chaine) une chaine VARCHAR(15) et de renvoyer ceux qui sont à 75% identique ( 9 cas identique / 15).
J'ai plusieurs solutions qui me vieinnent en tête mais je ne sais pas laquelle peut être la plus avantageuse.
Première:
Copié ma table client dans 2 tables identiques Comparant et Comparé pour ensuite faire mon jeux de test dessus.
=> 2 curseurs dans 2 boucles chacuns sur une table. Par contre meilleure indéxation des données.
Seconde:
A l'heure actuelle mon jeux de test se fait sur la table clients celle ou s'execute les curseur.
Utilisation d'une table temporaire dans lequel je fais une insertion de ces données de comparaison et non plus un update sur la table actuelle
=> 2 curseurs dans 2 boucles s'executant sur la même table.
Dernière solution:
Création d'index sur les champs de test
=> Solution expérimentée à petite échelle et qui ne permet pas semble t-il de mieux accélérer le résultat de la procédure
Dernière solution:
L'utilisation d'une fonction ressemblance qui comparerait mes champs un à un et ne rendrait que les résultats nécessaire
=> Une fonction sera t-elle plus rapide et surtout comment l'ecrire sans ses curseurs ?
Voilà j'expère avoir été le plus concis possible et surtout que quelqu'un pourra me venir en aide.
Coridalement,
Partager