在教自己如何优化设计和构建数据库的过程中,我偶然发现了以下问题:存储地址的地理位置的最佳方法是什么?
经过研究,我发现有两种可能性。使用mysql geometry
功能并将其存储为 point(lon, lat)
在一列中。
或者将它们存储在两个单独的列中作为 lon float(10,6)
以及 float(10,6)
.
但是,我发现很少有关于几何函数用来存储信息的字节数的信息。
创建表脚本示例
CREATE TABLE lonlatAsGeometry (
ID INT,
lonlat GEOMETRY
);
INSERT INTO lonlatAsGeometry VALUES (1, point(38.34886, -130.42156));
样品#2
CREATE TABLE lonlatAsFloat (
ID INT,
lon FLOAT(10,6),
lat FLOAT(10,6)
);
INSERT INTO lonlatAsFloat VALUES (1, 38.34886, -130.42156);
2条答案
按热度按时间vjrehmav1#
从不使用
FLOAT(m,n)
. 对于lat/lng来说,它恰好是可以的,但是在插入/获取时,它对数字做了不必要的事情。你需要多少分辨率?
-- http://mysql.rjweb.org/doc.php/latlng#representation_choices
回到你的问题。。。你说的“最佳”是什么意思?以上是在储存单独的lat/lng时尽量减少使用空间的一些选择。如前所述
POINT
需要25个字节。如果你有低于,比方说,一百万点,那么空间可能不是一个大问题。但也许“最佳”与你对价值观的使用有关。如果您正在使用SPATIAL
功能,然后POINT
可能是最佳的。等。底线:如果您使用
DECIMAL(6,4)
纬度(-90..90)和DECIMAL(7,4)
经度(-180..180)。axzmvihb2#
我发现
float
使用4个字节存储数据,同时
point
根据其中值的长度,最多使用25个字节。来源=https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html