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 秒)。我只使用一个表(约 100k 个条目),将其与自身连接。IN 语法在我的 Synology MYSQL 5.1 中不起作用。(不知何故使它崩溃使用SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);查询时间大约为 0.2 秒,而不使用其中的 WHERE 部分。我已经在sequence和上索引了表waypoint

谢谢!

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

编辑 好的,所以这无济于事,但根据您的解释,我认为真正的问题是您用来加入的气道表的气道字段缺少索引。添加该索引并查看是否可以提高您的性能。

于 2012-08-07T18:47:53.543 回答