性能方面,在mysql中存储lon和lat地理数据的最佳方式是什么?

bf1o4zei  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(395)

在教自己如何优化设计和构建数据库的过程中,我偶然发现了以下问题:存储地址的地理位置的最佳方法是什么?
经过研究,我发现有两种可能性。使用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);
vjrehmav

vjrehmav1#

从不使用 FLOAT(m,n) . 对于lat/lng来说,它恰好是可以的,但是在插入/获取时,它对数字做了不必要的事情。
你需要多少分辨率?

Representation       bytes  Resolution      Use
------------------   ----- ---------------  ------
DECIMAL(4,2)/(5,2)     5  1570 m    1.0 mi  Cities
SMALLINT scaled        4   682 m    0.4 mi  Cities
DECIMAL(6,4)/(7,4)     7    16 m     52 ft  Houses/Businesses
MEDIUMINT scaled       6   2.7 m    8.8 ft
FLOAT                  8   1.7 m    5.6 ft
DECIMAL(8,6)/(9,6)     9    16cm    1/2 ft  Friends in a mall
DOUBLE                16   3.5nm     ...    Fleas on a dog

-- 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)。

axzmvihb

axzmvihb2#

我发现 float 使用4个字节存储数据,
同时 point 根据其中值的长度,最多使用25个字节。
来源=https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html

相关问题