Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tính toán khoảng cách giữa 400 thành phố và tối ưu hóa MySQL cho nó?

Tôi đã thấy hai giải pháp khả thi.

Điều đầu tiên: Đối với mỗi cửa hàng thành phố trong cơ sở dữ liệu vĩ độ và kinh độ của nó; khi người dùng nhận được truy vấn, bạn sẽ tính toán khoảng cách với mọi thành phố khác và trả về kết quả.
Chuyên nghiệp là bạn có thể thêm mọi thành phố trong db mà không cần thêm thông tin khác.
Tại đây bạn cũng có thể tìm thấy các công thức, mẫu và mã cho calc khoảng cách vĩ độ-kinh độ ...

Thứ hai:
Tạo bảng cities_dist với ba trường:city1_id, city2_id, distance và đưa vào bên trong mọi sự kết hợp có thể có giữa các thành phố của bạn. Nhờ đó bạn có thể viết một truy vấn tùy theo thành phố đã chọn là city1_id hoặc city2_id.
Đặc biệt là bạn có thể sử dụng một truy vấn đơn giản mà không cần bất kỳ calc nào, trong khi khuyết điểm là bạn phải điền bảng này bất cứ lúc nào bạn chèn một thành phố mới vào cơ sở dữ liệu của mình.

ĐƯỢC CHỈNH SỬA sau khi người dùng nhận xét:
Hãy tưởng tượng bạn có ba thành phố

ID  NAME
1   New York
2   Rome
3   Berlin

Bảng đó sẽ giống như

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

Khi người dùng muốn bay từ Berlin, bạn có thể sử dụng

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. Lỗi khi tải mô-đun MySQLdb với Django trên OS X

  2. CHỌN nhiều bảng trong một truy vấn

  3. Mysql tạo bảng với nhiều khóa ngoại khi xóa bộ null

  4. Tomcat JDBC Conencton Pool + MySQL đưa ra sự cố Đường ống bị hỏng, ngay cả khi xác thực kết nối

  5. Cách lấy trạng thái MySQL trong một truy vấn