mySQL查询优化(LEFT JOIN& SUBQUERY)

时间:2012-08-07 17:50:35

标签: mysql optimization 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);使其崩溃查询时间大约是0.2秒,而不使用它的WHERE部分。我已经在sequencewaypoint上对表进行了索引。

谢谢!

1 个答案:

答案 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

修改 好吧,所以这没有帮助,但根据你的解释,我认为真正的问题是你正在使用的气道表气道领域缺乏索引。添加该索引,看看是否可以提高您的性能。