8

我正在 mysql 中设计一个表,它将存储用户列表和谷歌地图坐标(经度和纬度)。

我需要两个字段,还是可以用 1 个字段完成?

我不知道我用的是什么?我使用浮点数或小数或几何或有新的数据类型?选择最佳数据类型的优缺点是什么?

4

3 回答 3

5

您可以在 mysql 中使用空间扩展,数据类型为POINT

搜索速度会更快,地理操作也有很多功能。

于 2012-12-13T12:21:31.010 回答
3

此博客描述了一种正确且快速的方法:

http://www.rooftopsolutions.nl/blog/229

CREATE TABLE geo (
  longitude DOUBLE,
  latitude DOUBLE,
  idxlong SMALLINT,
  idxlat SMALLINT,
  INDEX (idxlong,idxlat);
);

第 2 部分包含一个基准:http ://www.rooftopsolutions.nl/blog/230

method  small   medium  large
plain select        1.73s
index on latitude       0.72s
using point field       9.52s
using point field + spatial index   0.00s   0.73s   18.82s
using morton number     0.78s
index on morton 0.00s   0.65s   3.23s

在实践中也是第 3 部分:http ://www.rooftopsolutions.nl/blog/231

于 2012-12-13T11:08:35.583 回答
2

您可以使用:

  • 一对DECIMAL(11, 8)(小数点前 3 位和小数点后 8 位)
  • 一对FLOAT

请注意,十进制列可以存储精确值,而浮点列存储该值的近似值。例如1.999999,将存储为1.999999十进制列,但存储2.0在浮点列中。

于 2012-12-13T11:08:26.790 回答