Bonjour à tous et à toutes,
Je suis actuellement à la recherche de solutions pour otpimiser une requête qui ne me parait pas très performante.
Voilà le cas :
J'ai une table avec des documents et une table avec des tâches à faire sur les documents (utilisation d'une clé étrangère sur la table des documents classique). De plus chaque document peut "dépendre d'un autre", avec un maximum de 2 niveaux (utilisation d'une clé sur la table des documents elle-même)
Je voudrais avoir un SELECT qui me ressort tous mes documents avec une colonne : concaténation des tâches à faire et une colonne : nombre de documents dépendants.
Pour information, j'ai 12246 documents avec une moyenne de 2 tâches par document.
Je vous mets ici les tests déjà réalisés avec les résultats en terme de timing :
Select des documents (seulement eux) avec jointures classiques
==> 00:00:00
Select avec le nom des tâches : appel à une fonction qui met en oeuvre la méthode : SELECT @nom = @nom + ...
==> 00:01:20
Select avec le nom des tâches : appel à une fonction qui met en oeuvre un curseur.
==> 00:01:19
Select avec le nombre de documents dépendants : appel à une fonction qui met en oeuvre la méthode : SELECT @nombre = @nombre + ...
==> 00:02:42
Select avec le nombre de documents dépendants : appel à une fonction qui met en oeuvre un curseur.
==> 00:02:59
________________________________________________________________
Select des documents (seulement eux) en passant par l'insertion dans une table temporaire.
==> 00:00:00
UPDATE des colonnes :
Select avec le nom des tâches : appel à une fonction qui met en oeuvre la méthode : SELECT @nom = @nom + ...
==> 00:01:23
Select avec le nom des tâches : appel à une fonction qui met en oeuvre un curseur.
==> 00:01:19
Select avec le nombre de documents dépendants : appel à une fonction qui met en oeuvre la méthode : SELECT @nombre = @nombre + ...
==> 00:02:46
Select avec le nombre de documents dépendants : appel à une fonction qui met en oeuvre un curseur.
==> 00:02:30
Voilà où j'en suis de mes tests. Auriez-vous, s'il vous plaît, des idées de méthode que je pourrais tester pour améliorer ces performances.
Merci d'avance pour votre aide.![]()
Partager