Похоже, вы используете геолокационные данные. Если вашей базой данных является Postgres, проверьте, можете ли вы установить или установить расширения PostGIS. Это дает вам очень быстрые инструменты, такие как «поиск ближайшего к этой точке», «поиск всего в этом круге», «поиск всего в этом квадрате» и т. Д.
http://postgis.refractions.net/
Вы бы сделали что-то вроде этого:
CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] gist_geometry_ops);
Тогда вы можете сделать что-то вроде этого - найти все в пределах 100 метров от точки:
SELECT * FROM GEOTABLE WHERE
GEOM && GeometryFromText(’BOX3D(900 900,1100 1100)’,-1) AND
Distance(GeometryFromText(’POINT(1000 1000)’,-1),GEOM) < 100;
Примеры из руководства .