[英]mySQL Query Optimization (LEFT JOIN & SUBQUERY)
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);
时崩溃SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
不使用WHERE部分,查询时间约为0.2 s。我已在sequence
和waypoint
上对表建立了索引。
谢谢!
不知道这是否会像我建议的那样将这些字段实际添加到表本身并为其建立索引有很大帮助,但是您可以尝试将数学从“位置”移到“选择”中:
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
编辑好的,所以这无济于事,但是根据您的解释,我认为真正的问题是您要加入的气道表的气道字段上缺少索引。 添加该索引,看看是否可以提高您的性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.