J'ai un grand DB de POI son maintenant environ 150K mais passera à ~ 1 MOptimiser une requête (distance entre 2 coordonnées)
J'ai besoin de retourner tous les points dans un certain rayon d'un point (lat, lon J'ai cette requête qui a bien fonctionné jusqu'à ce que le nombre de lignes augmente. également cette requête utilise cpu environ 60% et essentiellement super lent
SELECT
*,
(((acos(sin((57.757134*pi()/180)) *
sin((coX*pi()/180))+cos((57.757134*pi()/180)) *
cos((coX*pi()/180)) * cos(((37.616015- coY)*
pi()/180))))*180/pi())*60*1.1515
) as distance
FROM
places_en
JOIN ( /* these are the query parameters */
SELECT
57.757134 AS latpoint, 37.616015 AS longpoint,
200 AS radius, 111.045 AS distance_unit) AS p
WHERE
description != ''
AND coX BETWEEN p.latpoint - (p.radius/p.distance_unit)
AND p.latpoint + (p.radius/p.distance_unit)
AND coY BETWEEN p.longpoint - (p.radius/(p.distance_unit * COS(RADIANS(p.latpoint))))
AND p.longpoint + (p.radius/(p.distance_unit * COS(RADIANS(p.latpoint))))
HAVING
distance <= 200
ORDER BY
distance;
Comment puis-je faire mieux?
Merci
Vous devriez regarder dans une solution SIG. Voici un point de départ: http://dev.mysql.com/doc/refman/5.7/fr/spatial-extensions.html. –