在 MySQL 中对纬度和经度数据使用 DECIMAL(17,13) 是否对性能有影响?
Does it have impact on performance when using DECIMAL(17,13) for both Latitude and Longitude data in MySQL?
我研究了 Google 并在 Stack Overflow 上阅读了一些答案。 DECIMAL
是存储经纬度数据的不错选择。
但是对于小数点前后的位数,人们有不同的看法。
纬度范围最多为 2 位数字(-90 和 90),经度范围最多为 3 位数字(-180 和 180)。
我从RestfulAPI得到的小数点后的位数是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 or
至于性能,差别不大。以下是要点:
- 更多的小数位需要更多的磁盘(和 ram 缓存)space,所以会稍微减慢速度。
- 更多的小数位意味着更多的计算来处理这些数字。同样,这只是轻微的打击。
您提到的其他尺寸:
lat DECIMAL(17, 13)
lon DECIMAL(17, 13)
一共占用16个字节。与此同时,这对:
lat DECIMAL(14, 12)
lon DECIMAL(15, 12)
只小了一个字节!
我研究了 Google 并在 Stack Overflow 上阅读了一些答案。 DECIMAL
是存储经纬度数据的不错选择。
但是对于小数点前后的位数,人们有不同的看法。
纬度范围最多为 2 位数字(-90 和 90),经度范围最多为 3 位数字(-180 和 180)。
我从RestfulAPI得到的小数点后的位数是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 or
至于性能,差别不大。以下是要点:
- 更多的小数位需要更多的磁盘(和 ram 缓存)space,所以会稍微减慢速度。
- 更多的小数位意味着更多的计算来处理这些数字。同样,这只是轻微的打击。
您提到的其他尺寸:
lat DECIMAL(17, 13)
lon DECIMAL(17, 13)
一共占用16个字节。与此同时,这对:
lat DECIMAL(14, 12)
lon DECIMAL(15, 12)
只小了一个字节!