Open bouttier opened 1 year ago
Déjà proposé dans #269 via une VM taxref_tree
et étendu aux attributs des taxons par #284.
Vue matérialisée
+
on stock les paths uniquement pour les cd_ref
−
il faut joindre taxref_tree
à taxref
lorsque l’on souhaite filtrer
Colonne sur taxref
−
on duplique les paths pour chaque synonyme
+
inutile de joindre taxref_tree
pour filtrer
C'est pas mal aussi de ne pas ajouter de colonne maison dans la table Taxref.
- Colonne sur
taxref
−
on duplique les paths pour chaque synonyme+
inutile de joindretaxref_tree
pour filtrer
Autre avantage, on élimine une jointure ce qui augmente les performances des requêtes. Ceci dit les exemples proposés dans le ticket #269 nécessite de joindre plusieurs fois la vue stockant le champ path
.
L'utilisation d'une table externe ou d'une vue matérialisé (surement plus simple pour la maintenance de son contenu) est donc peut être tout aussi rapide. Il faudrait comparer les temps d’exécution des 2 solutions.
Plusieurs cas d’usage nécessite de filtrer des observations par taxon de n’importe quel rang :
Afin de répondre à ces besoins, deux stratégies existent :
find_all_taxons_children
), puis les requêtes utilisent une clauseIN
. Cette solution est très peu performante en cas de recherche à un niveau assez haut dans l’arbre taxonomique.Postgresql propose un module
ltree
permettant d’effectuer des recherches sur des structures d’arbres. L’idée serait :path
(nom à définir) à la tabletaxref
{cd_nom}.{cd_nom}.{cd_nom}
cd_nom
peut se faire par la requête suivante :@>
:Cette solution apporterait de bien meilleur performance que les
SELECT … IN
et permettrait de s’affranchir de la vue matérialisé dans le cas du référentiel de sensibilité.