简单mysql连接执行时间太长

简单mysql连接执行时间太长,mysql,performance,join,query-optimization,Mysql,Performance,Join,Query Optimization,我有一个查询执行时间太长(大约5分钟): 这部分的执行需要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%的行在该日期范围内,那么优化器将

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

这部分的执行需要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%的行在该日期范围内,那么优化器将决定简单地进行表扫描会更快。注意:这不一定是任务的缓慢部分

在获得这些行之后,它必须在另一个表中查找。这可能是缓慢的部分

您正在使用MyISAM。(您应该考虑更改为NYNDB)。如果代码> KEY-BuffelyStase太小,在该缓存中可能会发生颠簸。该设置应为可用RAM的20%左右

看起来你有一个“前缀”索引<代码>名称(8)。不要那样做;这会影响性能

机场
需要一个综合索引:
索引(国际民航组织、国际航空运输协会)


解释和表定义不一致。请提供
显示创建表
;它比您提供的图像更清晰、更完整。

如果您不使用innodb,请使用innodb。 在(国际民航组织、国际航空运输协会)的机场副本上创建多列索引,您可以利用该索引。 现在尝试以下查询。如果不起作用,请在此处发布您的解释

  SELECT
    itc_route.adep,
    itc_route.aircraft_id,
    intr.IATA
FROM
    itc_route
left JOIN 
(
select IATA,icao from airports_copy
) as intr
on intr.icao =itc_route.adep

WHERE
    itc_route.date between '2014-12-01' AND '2015-12-31'

你需要所有的财产吗?你的数据库引擎是什么using@EnriqueQuero是MyISAMW itc_route.adep和Airport.icao两列的数据类型是什么?可能它们是不同的类型,并且数据库对每个数据集执行隐式类型转换?@Olli它们都是varcharAn外部连接似乎是一个奇怪的选择,因为似乎不太可能存在没有IATA的行。
  SELECT
    itc_route.adep,
    itc_route.aircraft_id,
    intr.IATA
FROM
    itc_route
left JOIN 
(
select IATA,icao from airports_copy
) as intr
on intr.icao =itc_route.adep

WHERE
    itc_route.date between '2014-12-01' AND '2015-12-31'