性能问题...
我有一个具有地理位置数据(经度和纬度)的房屋数据库。
我想做的是找到使用InnoDB数据库引擎将位置数据存储在MySQL(v5.0.24a)中的最佳方法,这样我就可以执行很多查询,以返回之间的所有主记录。 x1和x2 latitude
以及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中查找经纬度数据并分离出经度/纬度?如果没有,那是什么?存在浮点数,小数甚至空间作为数据类型。
从性能 Angular 看SQL?如果没有,那是什么?
数据库引擎有意义吗?
更新:仍未答复
我在下面有3个不同的答案。一个人说要使用
Float
。有人说要使用INT
。有人说要使用Spatial
。因此,我使用MySQL的“EXPLAIN”语句来衡量SQL的执行速度。如果对经度和纬度数据类型使用
INT
或FLOAT
,则似乎在SQL执行(结果集获取)方面绝对没有区别。看起来使用“
BETWEEN
”语句比使用“>
”或“<
” SQL语句快得多。使用“BETWEEN
”比使用“>
”和“<
”语句快近三倍。话虽这么说,但我仍然不确定使用Spatial是否会对性能造成影响,因为我不清楚我的MySQL版本(v5.0.24)是否支持它,以及如何启用它(如果支持) 。
任何帮助都将得到极大的返回
最佳答案
float(10,6)很好。
任何其他复杂的存储方案都需要进出更多的转换,并且浮点数学运算速度很快。
关于sql - 数据库/SQL:如何存储经度/纬度数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1370170/