Reputation: 677
I want to search in my database the closest city from lat-long & range. To do that, I use this query :
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
This query was executed in 0.0123 sec.
Now I would like to Search in another database and retrieve 5 more fields from ville_nom_reel field from 1st Query. To do that, I used INNER JOIN :
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
Now this query is executed in 4 seconds ...
How Can I Optimize this ?
Thank you.
Upvotes: 1
Views: 4550
Reputation: 238296
You could try to hin that the lat/long should be evaluated first? Maybe:
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
Upvotes: 1
Reputation: 677
Thank you for your help.
First I removed * by all my needed field names. Thanks @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
Then, Like you said, I had to Index columns involved in ON clause.
Thanks @scaisEdge
Now this query is executed in 0.100 sec ! Perfect.
Upvotes: 0