Bonjour à tous,
Je possède trois tables définissant des lignes (St_LineString), et une définissant des points (St_Point).
Chaque point possède une référence à la ligne correspondante, mais parfois je ne l'ai pas via les données d'entrée. Alors je souhaite remplir cette référence en me basant sur la ligne la plus proche de ce point.
Voici la requête :
Cette requête me paraît plutôt simple, mais elle est très longue à s'exécuter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 UPDATE point a SET ref_line = ( SELECT name FROM ( select name, geometry from lines1 union select name, geometry from lines2 union select name, geometry from lines3 ) sub order by st_distance(sub.geometry, a.geometry) ASC limit 1 ) where ref_line is null or char_length(ref_line) = 0;
- Machine : Core i3, 1.7Ghz, 3Go de RAM
- OS : Ubuntu
- Données : 113789 lignes et 15385 points
Temps : plus de 6h d'exécution.
Est-ce qu'il n'y aurait pas possibilité d'améliorer cette fonction ? C'était une bonne idée le ORDER BY / LIMIT 1 ?
Peut-être mieux vaut-t-il placer les tables de lignes dans une vue avant de taper dedans ?
Merci à vous,
A bientôt
Partager