我的查询执行时间太长(大约5分钟):

SELECT
    itc_route.adep,
    itc_route.aircraft_id,
    Airport.IATA
FROM
    itc_route
LEFT JOIN airports_copy AS Airport ON itc_route.adep = Airport.icao
WHERE
    itc_route.date BETWEEN '2014-12-01'
AND '2015-12-01'

这部分我花了0.180秒才完成
SELECT * FROM airports_copy

这个需要0.560秒
SELECT * FROM itc_route WHERE itc_route.date BETWEEN '2014-12-01' AND '2015-12-01'

但当我真的加入他们-这只是一个太长的路!
所以这里是我的itc路径表索引:mysql - 简单的mysql连接执行时间太长-LMLPHP
这是我的机场复制索引:mysql - 简单的mysql连接执行时间太长-LMLPHP
这里有一个解释性陈述:mysql - 简单的mysql连接执行时间太长-LMLPHP
知道吗?

最佳答案

如果超过20%的行在该日期范围内,那么优化器将决定简单地进行表扫描会更快。注意:这不一定是任务的缓慢部分。
在得到这些行之后,它必须在另一个表中查找。这可能是慢的部分。
你在用弥撒。(您应该考虑切换到InnoDB。)如果key_buffer_size太小,则可能会在该缓存中发生抖动。这个设置应该是可用内存的20%左右。
你好像有一个“前缀”索引?Name(8)。别那样做,那样会影响表现。
Airport需要一个复合索引:INDEX(icao, IATA)
EXPLAIN和表定义不一致。请提供SHOW CREATE TABLE;它比您提供的图像更清晰和完整。

关于mysql - 简单的mysql连接执行时间太长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34314508/

10-11 05:26