パフォーマンスの問題...
地理位置情報データ (経度と緯度) を持つ家屋のデータベースがあります。
私がやりたいことは、InnoDB データベース エンジンを使用して MySQL (v5.0.24a) に位置データを格納する最良の方法を見つけて、間にあるすべてのホーム レコードを返す多くのクエリを実行できるようにすることです。 x1 と x2latitude
と y1 と y2 longitude
.
現在、私のデータベーススキーマは
---------------------
Homes
---------------------
geolat - Float (10,6)
geolng - Float (10,6)
---------------------
そして、私のクエリは次のとおりです。
SELECT ...
WHERE geolat BETWEEN x1 AND x2
AND geolng BETWEEN y1 AND y2
- 上記で説明したことは、緯度と経度のデータを Float (10,6) を使用して MySQL に保存し、経度/緯度を分離する最良の方法ですか? そうでない場合、何ですか?データ型として、Float、Decimal、さらには Spatial が存在します。
- これは、パフォーマンスの観点から SQL を実行する最良の方法ですか? そうでない場合、何ですか?
- 別の MySQL データベース エンジンを使用する意味はありますか?
更新: まだ回答がありません
以下に3つの異なる答えがあります。一人が使うと言うFloat
。ある人は を使うと言いますINT
。ある人は を使うと言いますSpatial
。
というわけで、MySQLの「EXPLAIN」ステートメントを使ってSQLの実行速度を計測してみました。経度と緯度のデータ型を使用してINT
も、使用しても、SQL の実行 (結果セットのフェッチ) にまったく違いはないようです。FLOAT
また、" " ステートメントを使用すると、" " または " " SQL ステートメントBETWEEN
を使用するよりも大幅に高速になるようです。" " と " " ステートメントを使用するよりも、" " を使用する方が約 3 倍高速です。>
<
BETWEEN
>
<
そうは言っても、Spatial を使用した場合のパフォーマンスへの影響についてはまだ不明です。これは、実行中の MySQL のバージョン (v5.0.24) でサポートされているかどうか、またサポートされている場合に有効にする方法が不明であるためです。 .
どんな助けでも大歓迎です