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

Zapytanie SQL do wykonywania wyszukiwania promienia na podstawie szerokości geograficznej i długości geograficznej

Moim zdaniem klauzula WHERE będzie powolna ze względu na zaangażowaną matematykę, a użycie funkcji w klauzuli WHERE uniemożliwi bazie danych użycie indeksu do przyspieszenia zapytania - w efekcie zbadasz każdą restaurację w bazy danych i wykonuj matematykę wielkiego koła w każdym rzędzie, za każdym razem, gdy tworzysz zapytanie.

Osobiście obliczyłbym współrzędne TopLeft i BottomRight kwadratu (który trzeba tylko obliczyć przy użyciu Pitagorasa) o bokach równych poszukiwanemu zakresowi, a następnie wykonałbym bardziej skomplikowany test klauzuli WHERE na mniejszym podzbiorze rekordy mieszczące się w tym kwadracie szerokości/długości.

Z indeksem długości i szerokości geograficznej w bazie danych zapytanie

WHERE     MyLat >= @MinLat AND MyLat <= @MaxLat
      AND MyLong >= @MinLong AND MyLong <= @MaxLong

powinien być bardzo wydajny

(Proszę zauważyć, że nie znam się konkretnie na MySQL, tylko o MS SQL)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tablica w Mysql GDZIE LUBISZ?

  2. MySQL - CONCAT - Czy istnieje sposób na połączenie ciągu i użycie go jako zmiennej?

  3. Dodaj dużo danych z pewnym przedziałem czasowym w Javie

  4. Czy dynamiczne zapytania mysql z kodem ucieczki sql są tak samo bezpieczne, jak przygotowane instrukcje?

  5. DOŁĄCZ do GROUP BY w znormalizowanej bazie danych o zasobach, tematach i rozdziałach