0
SELECT table1.waypoint,table1.latitude,
       table1.longitude,table1.airway
FROM 
  airways table1
JOIN 
   (SELECT * FROM airways
    WHERE waypoint='KORED') AS table2
  ON table1.airway = table2.airway 
WHERE table1.sequence=table2.sequence+1 
   OR table1.sequence=table2.sequence-1

こんにちは、

上記のクエリを最適化しようとしています。現時点では、クエリ時間はかなり長くなっています (約 0.9 秒)。私は 1 つのテーブル (〜 100k エントリ) のみを使用し、それ自体を結合しています。Synology MYSQL 5.1 で IN 構文が機能しません。(どういうわけか使用するとクラッシュしますSELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);。クエリ時間は、WHERE 部分を使用せずに約 0.2 秒です。sequencewaypoint

ありがとうございました!

4

1 に答える 1

0

これが、実際にこれらのフィールドをテーブル自体に追加してインデックスを作成するという私の提案と同じくらい役立つかどうかはわかりませんが、数学を where から select に移動してみてください:

SELECT table1.waypoint,table1.latitude,
       table1.longitude,table1.airway
FROM 
  airways table1
JOIN 
   (SELECT *,sequence + 1 as sequence_inc, sequence - 1 as sequence_dec FROM airways
    WHERE waypoint='KORED') AS table2
  ON table1.airway = table2.airway 
WHERE table1.sequence=table2.sequence_inc
   OR table1.sequence=table2.sequence_dec

編集 OK、それは役に立ちませんが、あなたの説明に基づいて、実際の問題は、結合に使用している気道テーブルの気道フィールドにインデックスがないことだと思います。そのインデックスを追加して、パフォーマンスが向上するかどうかを確認してください。

于 2012-08-07T18:47:53.543 に答える