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 :
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;
Cette requête me paraît plutôt simple, mais elle est très longue à s'exécuter :
- 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