性能问题...
我有一个具有地理位置数据(经度和纬度)的房屋数据库。
我想做的就是找到使用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中存储经度和纬度数据并分离出经度/纬度的最佳方法吗?如果没有,那是什么?存在浮点数,小数甚至空间作为数据类型。
- 从性能的角度来看,这是执行SQL的最佳方法吗?如果没有,那是什么?
- 使用其他MySQL数据库引擎有意义吗?
更新:仍然没有答案
我在下面有3个不同的答案。一个人说要用Float
。一个人说要用INT
。一个人说要用Spatial
。
因此,我使用MySQL的“ EXPLAIN”语句来衡量SQL的执行速度。如果对经度和纬度数据类型使用INT
或FLOAT
,则似乎在SQL执行(结果集获取)方面绝对没有区别。
看起来使用“ BETWEEN
”语句比使用“ >
”或“ <
” SQL语句快得多。使用“ BETWEEN
”比使用“ >
”和“ <
”语句快将近3倍。
话虽如此,我仍然不确定使用Spatial会对性能产生什么影响,因为我不清楚我的MySQL版本(v5.0.24)是否支持它,以及如何启用它(如果支持) 。
任何帮助将不胜感激