2016-12-06 7 views
0

私はmysqlのジオロケーションクエリとそのすべての正常に動作しています。しかし、私は距離をメートル(生成された列として)返し、次にそれを最も遠くに近づけようとすると、これは時間を食べる。 100kデータセットでは14秒近く。動的データを保持するMySqlインデックス生成カラム?

前述のようにdistance_in_metersは生成された列であり、インデックスされません。 そこに入るデータが常に異なっているにもかかわらず、この生成されたcolをインデックスする方法はありますか?この列のインデックスを作成すると役立つでしょうか?

+0

本当にすべての行について計算する必要がありますか?結果を100マイル以内に制限したい場合。 WHERE ABS(latitude1、latitude2)<3、ABS(longitude1、longitude2)<3は、完全な計算を実行しなければならない行の数を制限します。 – Alan

答えて

0

インデックスは、設計上、「静的」です。つまり、内に何も変わらない場合は、テーブルのインデックスを変更する必要はありません。外部の変更はインデックスに影響を与えません。

あなたの仕事は「私は(lat、lng)で、10番の最寄りのコーヒーショップはどこですか」と思われます。 (x、y)は、「最も近い」(すなわち、距離)を計算するために必要な外部データである。あなたは動的なインデックスを求めています。だから、 "いいえ"。

タスクがINDEX(latitude)(または経度)によってを助けることができ、それはテーブルの有意なチャンクをスキャンするフルテーブルスキャンからそれをもたらします。それは100Kの行に対して「十分に良い」かもしれません。

さらに多くの行が増えたり、I/Oが制限されたりすると(RAMが小さいため)、blogが必要になります。

関連する問題