Es scheint, als ob Sie geolokalisierte Daten verwenden. Wenn Ihr Datenbank-Backend Postgres ist, überprüfen Sie, ob Sie die PostGIS-Erweiterungen haben oder installieren können. Dies bietet Ihnen sehr schnelle Tools, mit denen Sie nach 'Suche nach dem nächsten Element zu diesem Punkt', 'Suche nach allem innerhalb dieses Kreises', 'Suche nach allem innerhalb dieses Quadrats' usw. suchen können.
http://postgis.refractions.net/
Sie würden etwas Ähnliches wie dies tun:
CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] gist_geometry_ops);
Dann können Sie etwas Ähnliches tun - finden Sie alles innerhalb von 100 Metern von einem Punkt:
SELECT * FROM GEOTABLE WHERE
GEOM && GeometryFromText('BOX3D(900 900,1100 1100)',-1) AND
Distance(GeometryFromText('POINT(1000 1000)',-1),GEOM) < 100;
Beispiele aus der Anleitung.