![](/img/trans.png)
[英]How to optimize SQL query and return count using inner join and subquery
[英]Optimize Inner Join SQL 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
此查詢在0.0123秒內執行。
現在我想在另一個數據庫中搜索,並從1st Query中的ville_nom_reel字段中檢索另外5個字段。 為此,我使用了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
現在這個查詢在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秒內完成! 完善。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.