Je ne suis pas un expert en SQL, mais le calcul de distance est relativement couteux et j'imagine qu'en faisant une requete du type:
SELECT * WHERE distance(A,B) < d; Le SGBD va avoir du mal a indexer correctement.
Plusieurs pistes pour optimiser:
Faire un premier filtrage dans une boite englobante du genre:
pour les points a une distance d de P.
select * as A where A.x < P.x+d and A.x > P.x-d and A.y < P.y+d and A.y > P.y-d;
tu pourras ensuite calculer la distance sur ce sous-résultat.
Un calcul de distance implique l'utilisation de racine carré, mais du coup tu peux encore optimiser un poil en comparant la distance au carré. (P.x-A.x)2+(P.y-A.y)2 < d2
# optimisation
Posté par errno . En réponse au message Comment démarrer mon projet de recherche spatiale / sql?. Évalué à 1.
Je ne suis pas un expert en SQL, mais le calcul de distance est relativement couteux et j'imagine qu'en faisant une requete du type:
SELECT * WHERE distance(A,B) < d; Le SGBD va avoir du mal a indexer correctement.
Plusieurs pistes pour optimiser:
Faire un premier filtrage dans une boite englobante du genre:
pour les points a une distance d de P.
select * as A where A.x < P.x+d and A.x > P.x-d and A.y < P.y+d and A.y > P.y-d;
tu pourras ensuite calculer la distance sur ce sous-résultat.
Un calcul de distance implique l'utilisation de racine carré, mais du coup tu peux encore optimiser un poil en comparant la distance au carré. (P.x-A.x)2+(P.y-A.y)2 < d2