我已经对Google进行了研究,并在堆栈溢出上阅读了一些答案。DECIMAL
是存储纬度和经度数据的好选择。
,但是人们对小数点之前和之后的数字数量有不同的看法。
纬度范围可以是最大2位数字(-90和90),并且经度范围可以是最大3位(-180和180)。
我从静止API获得的小数点后的数字数量为12位。
因此,数据库列可以如下。
lat DECIMAL(14, 12)
lon DECIMAL(15, 12)
如果数字增加数量,我可以安全地设置更多最大数字。
lat DECIMAL(17, 13)
lon DECIMAL(17, 13)
以这种方式,lat
和lon
都可以将数据存储到xxxx.xxxxxxxxxxxxx
,从而将数据存储在小数点之前的4 digits
和小数点之后的13 digits
。它在MySQL的性能上是否有进口?我很愚蠢地设置它们,因为lat range is -90 and 90
和lon range is -180 and 180
,但我觉得更安全。但是与此同时,我关注表演。
或只是将它们设置为:
lat DECIMAL(14, 12)
lon DECIMAL(15, 12)
,不必担心任何事情,因为这已经完全安全地存储了纬度和经度数据?
甚至12位数字都是可笑的。我推荐以下一个:
DECIMAL(8,6)/(9,6)
足以区分两个人相邻的人。我怀疑GPS并不是那么精确。总计:两列的9个字节。
DECIMAL(6,4)/(7,4)
对于房屋或企业来说足够,除了没有垂直组件。7个字节。
更多讨论LAT/LNG精确度:http://mysql.rjweb.org/doc.php/latlng#representation_choices或https://stackover.com/a/a/a/50126941/17666831/1766831
至于性能,没有太大的区别。这是要点:
- 更多的十进制位置需要更多的磁盘(和RAM缓存)空间,因此略微减慢了东西。
- 更多的小数位置意味着更多的计算与数字一起使用。同样,这只是一个轻微的打击。
您提到的其他尺寸:
lat DECIMAL(17, 13)
lon DECIMAL(17, 13)
总共获得16个字节。同时,这对:
lat DECIMAL(14, 12)
lon DECIMAL(15, 12)
只有一个字节较小!