数据库/ SQL:如何存储经度/纬度数据?

性能问题...

我有一个有地理位置数据(经度和纬度)的房屋数据库。

我想要做的是找到使用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中并分离出经度/纬度的最佳方式? 如果不是,那是什么? 作为数据类型,存在Float,Decimal和Spatial。
  • 从性能角度来看,这是执行SQL的最佳方式吗? 如果不是,那是什么?
  • 使用不同的MySQL数据库引擎是否有意义?
  • 更新:仍未解答

    下面有3个不同的答案。 一个人说使用Float 。 一个人说使用INT 。 一个人说使用Spatial

    所以我使用MySQL“EXPLAIN”语句来衡量SQL的执行速度。 如果对经度和纬度数据类型使用INTFLOAT ,那么SQL执行(结果集取回)完全没有区别。

    它也似乎使用“ BETWEEN ”语句比使用“ > ”或“ < ”SQL语句显着更快。 使用“ BETWEEN ”比使用“ > ”和“ < ”语句快3倍。

    据说,如果使用Spatial,我仍然不确定性能会受到什么影响,因为我不清楚它是否受我运行的MySQL版本(v5.0.24)支持......以及如果支持。

    任何帮助将大大appreacited


    浮动(10,6)就好了。

    任何其他复杂的存储方案都需要更多的翻译和浮点数,而且浮点数学运算速度很快。


    我知道你在问MySQL,但是如果空间数据对你的业务很重要,你可能需要重新考虑。 PostgreSQL + PostGIS也是免费软件,它们在管理空间和地理数据方面非常有名。 许多人只是因为PostGIS才使用PostgreSQL。

    虽然我对MySQL空间系统知之甚少,但对于您的用例来说,它可能已经足够了。


    在这里使用除“空间”以外的任何其他数据类型的问题是,您的类型“矩形选择”可以(通常,这取决于您的DBMS的亮度 - 而且MySQL一般不是最亮的)只能在一个单一维度。

    系统可以选择经度指数或纬度指数,并使用它来减少要检查的行集。 但是在完成之后,可以选择:(a)获取所有找到的行并对其进行扫描并测试“其他维度”,或者(b)在“其他维度”上执行类似的过程,然后匹配这两个结果集以查看哪些行出现在两者中。 后一个选项可能不会在您的特定DBMS引擎中实现。

    空间索引对后者“自动”进行排序,所以我认为可以肯定的是,空间索引在任何情况下都能提供最佳性能,但也可能出现这种情况,它并没有显着地超越其他解决方案,并且这是不值得的麻烦。 这取决于各种各样的东西,如实际数据的量和分布等等。

    float(tree)索引肯定比整数索引慢,因为在浮点上执行'>'比在整数上执行'>'要花费的时间要长。 但如果这种效果真的引人注意,我会感到惊讶。

    链接地址: http://www.djcxy.com/p/93905.html

    上一篇: Database/SQL: How to store longitude/latitude data?

    下一篇: ordinates (longitude/latitude, from Google Maps) in SQL Server?