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
上对表进行了索引。
谢谢!
答案 0 :(得分: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
修改强> 好吧,所以这没有帮助,但根据你的解释,我认为真正的问题是你正在使用的气道表气道领域缺乏索引。添加该索引,看看是否可以提高您的性能。