Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Powolne zapytanie w wynikach wyszukiwania na podstawie lokalizacji

Możesz użyć rozszerzenia przestrzennego mysql i zapisać szerokość i długość geograficzną jako typ danych punktu i uczynić go indeksem przestrzennym. W ten sposób możesz zmienić kolejność współrzędnych wzdłuż krzywej, zmniejszyć wymiar i zachować informacje przestrzenne. Możesz użyć indeksu przestrzennego jako ramki ograniczającej do filtrowania zapytania, a następnie użyć formuły Harvesine, aby wybrać optymalny wynik. Twoje pole ograniczające powinno być większe niż promień wielkiego koła. Mysql używa rtree z pewnym indeksem przestrzennym, a mój przykład dotyczył krzywej Z lub krzywej Hilberta:https://softwareengineering.stackexchange.com/questions/113256/co-is-the-difference-between-btree-and-rtree-indexing .Następnie możesz wstawić współrzędną geograficzną bezpośrednio do kolumny punktów:http://dev.mysql.com/doc/refman/5.0/en/tworzenie-wartości-przestrzennych.html . Możesz też użyć typu danych geometrii:http:// markmaunder.com/2009/10/10/mysql-gis-extensions-szybki-start/ . Następnie możesz użyć funkcji MBRcontains w następujący sposób: http://dev.mysql.com/doc/refman/4.1/en/relacje-on-geometry-mbr.html lub inne funkcje:http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Dlatego potrzebujesz ramki ograniczającej. Oto kilka przykładów:

Oto prosty przykład z typem danych punktu:

    CREATE SPATIAL INDEX sx_place_location ON place (location)

    SELECT  * FROM    mytable
    WHERE   MBRContains
           (
           LineString
                   (
                   Point($x - $radius, $y - $radius),
                   Point($x + $radius, $y + $radius)
                   )
           location
           )
    AND Distance(Point($x, $y), location) <= $radius

Nie jestem pewien, czy to działa, ponieważ używa zmiennej promienia z funkcją ograniczającą. Wydaje mi się, że MBRwithin jest nieco prostszy, ponieważ nie wymaga żadnych argumentów:Mysql:Optymalizacja znajdowania super węzła w zagnieżdżonym drzewie zestawu .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Workbench:Nie można połączyć się z serwerem MySQL w przypadku błędu 127.0.0.1' (10061)

  2. Jak mogę osiągnąć funkcjonalność initcap w MySQL?

  3. Schemat bazy danych Wufoo — jak byś go zaprojektował?

  4. Zapytanie MySql do wybrania rekordów z konkretną datą

  5. Jak połączyć się ze zdalnym serwerem MySQL przez SSH za pomocą JPA?