Mysql 优化内部连接SQL查询

Mysql 优化内部连接SQL查询,mysql,sql,Mysql,Sql,我想在我的数据库中搜索距离lat long&range最近的城市。为此,我使用以下查询: SELECT ville_nom_reel FROM inspitravel.villes_france_free WHERE ville_latitude_deg BETWEEN 48.0462165495 AND 48.9471174505 AND ville_longitude_deg BETWEEN -0.45045045045 AND 0.45045045045 此查询在0.0123秒内执行

我想在我的数据库中搜索距离lat long&range最近的城市。为此,我使用以下查询:

SELECT ville_nom_reel FROM inspitravel.villes_france_free 
WHERE ville_latitude_deg BETWEEN 48.0462165495 AND 48.9471174505 
AND ville_longitude_deg BETWEEN -0.45045045045 AND 0.45045045045
此查询在0.0123秒内执行。

现在我想在另一个数据库中搜索,并从第一次查询的ville_nom_reel字段中检索5个字段。为此,我使用了内部联接:

SELECT villes_france_free.ville_nom_reel, villes_booking.full_name, villes_booking.number_of_hotels, villes_booking.deeplink  FROM inspitravel.villes_france_free 
INNER JOIN inspitravel.villes_booking ON villes_france_free.ville_nom_reel = villes_booking.full_name 
WHERE ville_latitude_deg BETWEEN 48.0462165495 AND 48.9471174505 
AND ville_longitude_deg BETWEEN -0.45045045045 AND 0.45045045045 
AND ville_population_2012 > 3000 Limit 1
现在这个查询在4秒内执行
如何优化此功能?
谢谢。

您可以尝试先评估横向/纵向?也许:

SELECT  * 
FROM    (
        SELECT  *
        FROM    inspitravel.villes_france_free 
        WHERE   ville_latitude_deg BETWEEN 48.0462165495 AND 48.9471174505 
                AND ville_longitude_deg BETWEEN -0.45045045045 AND 0.45045045045 
        ) villes
JOIN    inspitravel.villes_booking 
ON      villes.ville_nom_reel = villes_booking.full_name 
WHERE   ville_population_2012 > 3000
LIMIT   1

谢谢你的帮助
首先我删除了*所有需要的字段名。谢谢@apomene

SELECT villes_france_free.ville_nom_reel, villes_booking.full_name, villes_booking.number_of_hotels, villes_booking.deeplink  FROM inspitravel.villes_france_free 
INNER JOIN inspitravel.villes_booking ON villes_france_free.ville_nom_reel = villes_booking.full_name 
WHERE ville_latitude_deg BETWEEN 48.0462165495 AND 48.9471174505 
AND ville_longitude_deg BETWEEN -0.45045045045 AND 0.45045045045 
AND ville_population_2012 > 3000 Limit 1
然后,正如您所说,我必须为ON子句中涉及的列编制索引。
谢谢@scaisEdge
现在这个查询将在0.100秒内执行!很好。

对于start,不要使用*而是只声明在on子句中涉及的列上要索引的5个字段?和ville_population_2012?你能不能也添加表结构(哪些列是哪种类型的)。我认为(lat,lon)上的覆盖索引是最佳的。对村庄名称进行索引可以工作,但对于lat/long,你需要一个空间索引。索引返回空结果!您是对的,将
限制1
移动到内部查询是不正确的!很高兴索引建议帮助您在每个表中获得一个索引,因此您还可以在(lat,lon)上添加一个覆盖索引