2017-03-06 22 views
1

lat-long & rangeから最も近い都市をデータベースで検索したいですか?これを行うには、私はこのクエリを使用します。
内部結合SQLクエリを最適化

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秒で実行されました。

もう1つのデータベースで検索し、から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秒で実行されますか? ありがとうございます。

+1

start *は使用しませんが、必要な5つのフィールドのみを宣言します – apomene

+4

on節に関連する列のインデックスを作成しましたか?とville_population_2012? – scaisEdge

+0

テーブル構造も追加できます(どの列がどのタイプか)。 – Olli

答えて

0

緯度/経度を最初に評価する必要がありますか?多分:

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 
+0

空の結果を返します! –

+0

あなたの権利は、内側のクエリに 'limit 1 'を移動するのが間違っていました!インデックスの提案がうまくいった – Andomar

0

ありがとうございました。
最初私はすべての必要なフィールド名で*を削除しました。おかげで、あなたが言ったように、私は、ON句に関与インデックス列に持っていた、そして、

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 

を@apomene。
ありがとう@scaisEdge このクエリは0.100秒で実行されます!完璧。

+0

テーブルごとに1つのインデックスが得られるので、(lat、lon)にカバリングインデックスを追加することもできます – Strawberry

関連する問題