目前我正在开发基于位置的应用程序。一个主要的应用功能是根据搜索条件定位点,并从一个点定位在给定范围内的点。
显而易见的选择是将经度/纬度存储为浮点数或整数,但我在MySQL中找到了空间数据类型,并开始挖掘。不幸的是,如果我没记错的话,MyISAM只支持空间索引,它不支持外键(这是我需要的)。
那么,哪个更好(也更快)-将经度/经度存储为普通数字,还是使用不带索引的点类型?
发布于 2014-08-11 09:59:01
您可以使用一个四密钥来代替。将x和y值转换为二进制文件,然后将这些二进制文件连接起来。这些点沿着z曲线进行排序,也就是一条怪物曲线。它具有非常好的空间特性。您可以使用最高有效位来验证上限。
发布于 2014-08-11 21:36:23
编辑。回答你标题中的问题,简而言之,你不能,没有一些黑客(见下文)。然而,我今天在MySQL空间http://mysqlserverteam.com/innodb-spatial-indexes-in-5-7-4-lab-release/上回答另一个问题时遇到了这个问题。进一步的挖掘表明,实际上空间索引将在MySQL 5.7.5中发布,尽管它被标记为一个里程碑版本,但似乎即将发布。
这里有一个建议:https://dba.stackexchange.com/questions/49307/spatial-index-on-an-innodb-table让你的空间数据同时保存在InnoDB和MyISAM中,在MyISAM中进行空间搜索,然后加入一个共享键,在InnoDB中查询属性,但这看起来很老套,效率很低,而且还存在关于两个引擎之间不同的锁定行为以及如何大规模执行的问题。
这将是一个好日子,当InnoDB终于支持空间索引,它已经等待了很多年。
https://stackoverflow.com/questions/25238611
复制相似问题