J'ai une base de données de noeuds et de chemins. Une voie contient deux ou plusieurs nœuds. Certains nœuds appartiennent à plusieurs façons, et sont donc appelés une «jointure» entre deux ou plusieurs façons. J'essaie de trouver tous les nœuds qui se joignent deux ou plusieurs façons. J'utilise donc cette requête,Optimisation d'une requête de jointure de noeud
SELECT *
FROM way_nodes wl
JOIN way_nodes wr
ON wr.node_id = wl.node_id AND wr.way_id != wl.way_id
La table way_nodes contient la liste des nœuds de chaque façon.
Cependant, il est horriblement lent sur ma base de données avec 9,021 voies et 43,706 nœuds, et ne me donne que 20-30 nœuds par seconde. Au début, j'ai essayé de tenir compte du nombre de fois qu'un nœud est utilisé, mais cela prend encore beaucoup de temps. J'utilise SQLite3, mais je suspecte que mon problème s'applique à toutes les bases de données. Comment une telle requête serait-elle optimisée?
Est-ce que je comprends bien cette requête? Trouver des nœuds qui partagent le nodeID mais pas le way_id? –
Trouvez way_nodes partageant le même id_noeud. Le but est d'obtenir les deux way_id différents. way_nodes contient un node_id et un way_id. –
Est-il plus rapide ou plus lent lorsque vous l'exécutez avec la clause join de juste "wr.node_id = wl.node_id" –