繁体   English   中英

MySQL查询优化(左联接和子查询)

[英]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。我已在sequencewaypoint上对表建立了索引。

谢谢!

不知道这是否会像我建议的那样将这些字段实际添加到表本身并为其建立索引有很大帮助,但是您可以尝试将数学从“位置”移到“选择”中:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM