我的查询执行时间太长(大约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路径表索引:
这是我的机场复制索引:
这里有一个解释性陈述:
知道吗?
最佳答案
如果超过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/