Mysql?
Используй Spatial и хранимую процедуру, рассчитывающую расстояние:
DELIMITER $$
CREATE DEFINER=`ras`@`%` FUNCTION `distance`(a POINT, b POINT) RETURNS double
DETERMINISTIC
BEGIN
RETURN glength(linestring(a,b));
-- RETURN round(glength(linestringfromwkb(linestring(a,b))));
END
Запусти mysqltunner и доведи конфиги до оптимального состояния.
В кратце как-то так.