sql >> Base de Datos >  >> RDS >> Mysql

¿Calcular la distancia entre 400 ciudades y optimizar MySQL para ello?

Vi dos posibles soluciones.

Primero:
Para cada ciudad almacenar en la base de datos su latitud y longitud; cuando el usuario recibe una consulta, calcula la distancia con cualquier otra ciudad y devuelve resultados.
Pro es que puede agregar cada ciudad en db sin necesidad de agregar otra información.
Aquí también puede encontrar fórmulas, ejemplos y código para el cálculo de la distancia de latitud-longitud...

Segundo:
Cree una tabla cities_dist con tres campos:city1_id, city2_id, distance y coloque todas las combinaciones posibles entre sus ciudades. Con eso, puede escribir una consulta con la ciudad seleccionada, siendo city1_id o city2_id.
Pro es que puede usar una consulta simple sin ningún cálculo, mientras que las desventajas son que debe completar esta tabla cada vez que inserte una nueva ciudad en su base de datos.

EDITADO después del comentario del usuario:
Imagina que tienes tres ciudades

ID  NAME
1   New York
2   Rome
3   Berlin

Esa mesa debería verse como

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

Cuando el usuario quiera volar desde Berlín, puede usar

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