2 Stimmen

Wie man Punkte findet, sie nach ihrer Nähe sortiert und 1-20, 21-40 usw. erhält. Effiziente Verwendung von Myisam und mysql und räumlicher Index

Angenommen, ich möchte die 20 nächstgelegenen Geschäfte in meiner Nähe finden. Später möchte ich die nächsten 20 Geschäfte in meiner Nähe sehen usw. Ja, ich habe myisam. Ich habe räumliche Indizes auf den Punkt. Ich bin auf der Suche nach dem aktuellen SQL-Befehl, den ich senden sollte.

Um das klarzustellen:

Anmerkung:

  1. Ich verwende mysql myisam räumlicher Index. Ich surfe auf Google hin und her und habe nichts über meinen genauen Bedarf gefunden.
  2. I Entfernung für die gesamte Tabelle berechnen (das ist zu ineffizient). Der Sinn eines räumlichen Index ist, dass man zumindest viele Punkte effizient loswerden kann. Wenn einige Punkte links und oben nicht in Frage kommen, dann kommen alle Punkte links und oben von diesem Punkt auch nicht in Frage.
  3. I Regionen, die noch ineffizient sind. Die Region, die mich interessiert, ist 10 km groß und es gibt dort 65 000 Unternehmen.
  4. I für eine vernünftige Anzahl von Punkten, weil ich die Punkte nach Abstand sortieren und die Punkte 1-20, 21-40, 41-60 usw. anzeigen können.
  5. Ich habe eine Möglichkeit gefunden, dies für postgis zu tun http://blog.opengeo.org/2011/09/28/indexed-nearest-neighbour-search-in-postgis/ Ich möchte etwas ähnliches, aber für mysql myisam.
  6. Ich möchte eine Website mit aktuellem Sql-Code als Beispiel oder aktuellem Beispiel-Sql-Befehl. Sagen Sie also bitte nicht einfach: "Verwenden Sie Spatial". Duh. Ich weiß. Ich möchte den tatsächlichen Sql-Befehl.
  7. Ich möchte keine komplizierte Schleife machen, in der ich zuerst eine kleine Region durchsuche. Es muss ein Sql-Befehl sein, der dies in einem Schlag effizient von mysql-Engine getan wird.
  8. Die kartesische Entfernung ist in Ordnung. Man muss nicht wissen, dass wir auf einem Globus leben, es sei denn, man befindet sich am Nord- oder Südpol, wo sich die meisten unserer Kunden nicht aufhalten.

Es gibt 1,6 Millionen Unternehmen. Natürlich ist es dumm, die Entfernung für alle zu berechnen und sie dann zu sortieren.

Das ist der Punkt, an dem der Geo-Raum-Index ins Spiel kommt, oder?

Welchen SQL-Befehl muss ich also senden?

2voto

Bryan Glazer Punkte 853

Da ich auf Ihre Frage nicht eingehen kann, muss ich dies wohl als Antwort stehen lassen.

Sehen Sie sich diese Frage an:

https://gis.stackexchange.com/questions/22082/how-can-i-use-r-tree-to-find-points-within-a-distance-in-spatialite

Wenn man sich ein wenig in den Dokumenten umsieht, scheinen die Funktionen, die MyIsam bereitstellt, keine gute Möglichkeit zu bieten, dies zu tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X