性能问题...
我有一个包含地理位置数据(经度和纬度)的房屋数据库。
我想要做的是找到使用 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
如果使用或FLOAT
用于经度和纬度数据类型,则似乎在 SQL 执行(结果集获取)方面绝对没有区别。
使用“”语句似乎也比使用“ ”或“ ”SQL语句BETWEEN
快得多。使用 " " 比使用 " " 和 " " 语句快近 3 倍。>
<
BETWEEN
>
<
话虽如此,我仍然不确定如果使用 Spatial 会对性能产生什么影响,因为我不清楚我运行的 MySQL 版本(v5.0.24)是否支持它......以及如果支持我如何启用它.
任何帮助将不胜感激