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