在MySQL中对纬度和经度数据使用DECIMAL(17,13)时,它是否会对性能产生影响?

问题描述 投票:1回答:1

我已经在Google上做过研究,并在Stack Overflow上阅读了一些答案。 DECIMAL是存储纬度和经度数据的不错选择。

但人们对小数点前后的数字位数有不同的看法。

纬度范围最多可以是2位数(-90和90),经度范围最多可以是3位数(-180和180)。

我从Restful API获得的小数点后的数字是12位数。

因此,数据库列可以如下。

lat DECIMAL(14, 12)
lon DECIMAL(15, 12)

如果数字增加,我可以安全地设置更多的最大数字如下。

lat DECIMAL(17, 13)
lon DECIMAL(17, 13)

这样,latlon都可以存储高达xxxx.xxxxxxxxxxxxx的数据,因此小数点前的4 digits和小数点后的13 digits。它是否具有MySQL中的性能导入并且没有必要?因为lat range is -90 and 90lon range is -180 and 180所以设置它们我觉得很愚蠢,但我感觉更安全。但与此同时我关注的是性能。

或者只是将它们设置为:

lat DECIMAL(14, 12)
lon DECIMAL(15, 12)

而且无需担心任何事情,因为这对于存储纬度和经度数据已经完全安全了吗?

mysql database latitude-longitude column-length
1个回答
1
投票

即使是12位也是荒唐可笑的。我推荐以下之一:

DECIMAL(8,6)/(9,6)足以区分两个站在一起的人。我怀疑GPS不是那么精确。总计:两列的9个字节。

除了没有垂直组件外,DECIMAL(6,4)/(7,4)足以满足房屋或企业的需求。 7个字节。

关于lat / lng精度的更多讨论:http://mysql.rjweb.org/doc.php/latlng#representation_choiceshttps://stackoverflow.com/a/50126941/1766831

至于性能,没有太大的区别。以下是要点:

  • 更多小数位会占用更多磁盘(和ram缓存)空间,因此会略微减慢速度。
  • 更多的小数位意味着更多的计算来处理数字。同样,这只是轻微的打击。

你提到的其他尺码:

lat DECIMAL(17, 13)
lon DECIMAL(17, 13)

总共需要16个字节。同时,这对:

lat DECIMAL(14, 12)
lon DECIMAL(15, 12)

只小一个字节!

© www.soinside.com 2019 - 2024. All rights reserved.