Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankwerte basierend auf dem Standort des Benutzers abfragen

Es gibt eine Frage, die die Fähigkeiten verschiedener räumlicher Datenbanken vergleicht, GIS:PostGIS/PostgreSQL vs. MySQL vs. SQL Server? , wo Postgis als ziemlich klarer Gewinner gegenüber MySQL hervorgeht.

Unabhängig davon, ob Sie MySQL oder Postgis verwenden, wäre es viel besser, wenn Sie können, Ihre Breiten- und Längenwerte als Geometrie/Geographie (Punkt) zu speichern, als die Funktionen, die verwendet werden können, um Dinge in der Nähe zu finden, ST_Distance , ST_Distance_Sphere und der obskurere <-> Operator , siehe Find n Nearest Neighbors for angegebener Punkt mit PostGIS? (z. B. Verwendung) direkt an Geometrie-/Geografiespalten arbeiten. Noch wichtiger ist, dass Sie einen räumlichen Index hinzufügen können , die diese Funktionen benötigen, um ordnungsgemäß zu funktionieren, wodurch Suchen in separat indizierten Längen- und Breitengradspalten um ein Vielfaches übertroffen werden (dies hängt von der Tabellengröße ab, wächst jedoch mit zunehmender Tabellengröße),

In Postgis können Sie Lat und Lon in eine Geometrie umwandeln mit:

alter table mytable add column geom (Geometry, 4326);
update mytable set geom = ST_SetSRID(ST_MakePoint(lon, lat), 4326)
create index ix_spatial_mytable_geom on mytable using gist(geom);

An diesem Punkt können Sie sehr effiziente Abfragen durchführen, um Punkte in der Nähe anderer Punkte zu finden, indem Sie eines der Beispiele in den obigen Links verwenden.

Sie können ähnliche Dinge in MySQL tun, obwohl es kein räumliches Bezugssystem unterstützt, dh das obige 4326, was lat/lon bedeutet, und es fehlt eine ST_MakePoint-Funktion, sodass Sie STGeomFromText verwenden und lat/ verketten müssten. lon zusammen, um einen PUNKT zu machen. Es macht auch alles in planaren Koordinaten, wie Claudio und andere gesagt haben, was bei Postgis kein Problem ist.

Ich entschuldige mich für eine lange und etwas tangentiale Antwort, aber nachdem ich verschiedene Migrationen zwischen Datenbanken mit großen Datenmengen (MySQL, SQL Server und Postgres/GIS) durchgeführt und dabei viele Fehler gemacht habe, hoffe ich, dass ich Sie in die Irre führen kann richtige Richtung (und fügen Sie ein wenig Zukunftssicherheit hinzu, wenn Sie anfangen möchten, einige andere räumliche Funktionen zu verwenden, die Postigs in Pik hat).