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.