2017-01-04 3 views
0

私は距離で円を選択しています。私は緯度が&の1ポイントを持っています。私はデータベースの中に私の周りのいくつかのポイントがあるかどうか検索したいと思います。そして、はい、それは円でなければなりません!MySQLで繰り返し複雑な空間クエリを実行するとパフォーマンスが低下します

私は(私はちょうど私が数学を行うことができない、それをグーグル)クエリでこの句を使用しています:

((6373 * acos (cos (radians(48.568962)) * cos(radians(X(coords))) * cos(radians(Y(coords)) - radians(6.821352)) + sin (radians(48.568962)) * sin(radians(X(coords))))) <='0.2') 

0.2 = 200メートル

  1. 私は小数点データ型を使用しています
  2. はい、私はそれが
  3. はい、私は「空間」機能を使用しようとしているが、それは円を返していない、それはいくつかのOVALを返すだ上で空間インデックスを持っていると私は、正確な円を必要とする

この "circle"節は、すべての表に対して非常に非常に時間がかかります。私がSPATIALのOVALメソッドを使っているとき。それはおそらく0.1秒かかり、それは素晴らしいです!しかし、私はサークルが必要です、これは17秒、笑を取る。

誰かを助けることができますか?ありがとう、たくさんの人!

EDIT:空間関数は、このようないくつかの意味:(。テーブル構造体)

WHERE ST_Contains(ST_Buffer(
     ST_GeomFromText('POINT(12.3456 34.5678)'), (0.00001*1000)) , coords) <= 1 /* 1 km */ 

EDIT 2:私はもちろん、この表から10行を期待してい

enter image description here enter image description here

私はwz_uuidのインデックスを持っています

select a....., b.... from table_1 a left join table_2 b on a.wz_uuid=b.wz_uuid 

これは2つのテーブルだけではなく、私は11のテーブル* 2を持っています。 (毎週のデータベースバックアップ)。最初のテーブル(_1)は0〜4000行、2〜11は300k +行です。

すべてのインデックスは関連しており、データ型は&エンコーディングです。 100ミリ秒にXX秒から

wz_uuid & id - unique, btree index 
others - btree indexes 
coords - spatial index 
+0

はい、あなたは高価な半正矢式を使用しないように地理空間機能を使用する必要がありたいすべてです。 –

+0

テーブルを掲示し、期待される結果を教えてください。地理空間関数を使用している方法では、索引は使用できません。 – e4c5

+0

なぜ私はそれを使用できないのですか?私はすでにそれをテストしましたが、それは楕円形です。私は円で考える正しい関数が必要です。私はあなたのテーブルを表示することができますが、それはちょうど30列の多分通常の最適化されたテーブルであり、私はAVGの行を作る必要があるので、それらのすべてが必要です。 –

答えて

関連する問題