sql >> データベース >  >> RDS >> Mysql

400の都市間の距離を計算し、MySQLを最適化しますか?

    私は2つの可能な解決策を見ました。

    最初のもの:
    データベース内の各都市ストアについて、その緯度と経度。ユーザーがクエリを受け取ると、他のすべての都市との距離を計算して結果を返します。
    Proは、他の情報を追加しなくても、dbにすべての都市を追加できます。
    こちら 緯度と経度の距離を計算するための数式、サンプル、コードもあります...

    2番目:
    テーブルを作成するcities_dist 3つのフィールド:city1_id, city2_id, distance 都市間のすべての可能な組み合わせの中に入れます。これにより、選択した都市でクエリを作成できます。city1_idまたはcity2_id。
    長所は、計算なしで単純なクエリを使用できることですが、短所は入力する必要があることです。データベースに新しい都市を挿入するたびに、このテーブルが表示されます。

    ユーザーコメント後に編集:
    3つの都市があると想像してください

    ID  NAME
    1   New York
    2   Rome
    3   Berlin
    

    そのテーブルは次のようになります

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

    ユーザーがベルリンから飛行機で行きたい場合は、

    を使用できます。
    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. Oracleテーブル変更モニター

    2. CakePHP 3:一時的なSQLテーブルのベストプラクティス

    3. mysqlの列からすべてまたは特定の印刷不可能な文字を削除します

    4. SQLシングルクエリを出力する(Yii 1.x)