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

Obliczasz odległość między 400 miastami i optymalizujesz dla niej MySQL?

Widziałem dwa możliwe rozwiązania.

Pierwszy:
Dla każdego miasta zapisuje w bazie jego szerokość i długość geograficzną; gdy użytkownik otrzyma zapytanie, obliczasz odległość z każdym innym miastem i zwracasz wyniki.
Zaletą jest to, że możesz dodać każde miasto w bazie danych bez konieczności dodawania innych informacji.
Tu możesz znaleźć wzory, próbki i kod do obliczania odległości między szerokością geograficzną i długością geograficzną...

Po drugie:
Utwórz tabelę cities_dist z trzema polami:city1_id, city2_id, distance i umieść w niej każdą możliwą kombinację spośród swoich miast.Dzięki temu możesz napisać zapytanie z wybranym miastem o nazwie city1_id lub city2_id.
Zaletą jest to, że możesz użyć prostego zapytania bez żadnych obliczeń, a wady są to, że musisz je wypełnić tę tabelę za każdym razem, gdy wstawiasz nowe miasto do swojej bazy danych.

EDYTOWANO po komentarzu użytkownika:
Wyobraź sobie, że masz trzy miasta

ID  NAME
1   New York
2   Rome
3   Berlin

Ten stół powinien wyglądać jak

CITY1  CITY2  DIST
1      2      1500
1      3      1200
2      3       400

Gdy użytkownik chce lecieć z Berlina, możesz użyć

SELECT c1.name, c2.name, cd.dist 
FROM cities_dist cd
  INNER JOIN cities c1 ON cd.city1 = c1.id
  INNER JOIN cities c2 ON cd.city2 = c2.id
WHERE cd.city1 = your_id
   OR cd.city2 = your_id
ORDER BY cd.dist ASC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PlanetScale &Vitess:Integralność referencyjna ze starszymi bazami danych podzielonych na fragmenty

  2. Czy wprowadzenie kluczy obcych do MySQL zmniejsza wydajność?

  3. Instrukcja PHP SQL Foreach

  4. mysqli-- instrukcja przygotowania nie powiodła się z błędem, nie użyto tabeli

  5. Instrukcja InnoDB SELECT ... FOR UPDATE blokująca wszystkie wiersze w tabeli