mysql特性举例_MySQL 5.7 GIS特性

MySQL 5.7版本对GIS特性进行了重大改进,包括使用Boost Geometry库重构地理空间数据,增加多种GIS函数,如ST_Distance_Sphere,并在InnoDB引擎中原生支持地理空间数据类型及R树索引。这使得MySQL能够更好地服务于地理位置应用,例如通过R树索引和GeoHash执行高效的LBS查询。
摘要由CSDN通过智能技术生成

GIS特性 版本支持情况

MySQL 5.7版本之前只有MyISAM引擎支持空间数据;

MySQL 5.7版本之前只有MyISAM支持R树查询;

MySQL 5.7版本之前地理空间类型性能比较一般;

MySQL 5.7版本之前地理空间函数支持度有限;

MySQL 5.7版本之前不支持GeoHash以及GeoJson;

基于此,业界的LBS应用大多基于MongoDB数据库,因为MongoDB内置的geoindex非常好用,外加分片特性非常适合于LBS这样的应用。

对于事务要求较高的应用场景,也有公司使用PostGIS。

MySQL 5.7 GIS改进

通过Boost Geometry库重构之前的地理空间数据的代码实现;

增加很多通用的GIS函数,比如球面举例的计算函数ST_Distance_Sphere等;

InnoDB存储引擎原生支持地理空间数据类型

InnoDB存储引擎新增R树索引支持地理空间查询

测试

导入下载数据集,表结构如下:

CREATE TABLE nodes (

id bigint(20) DEFAULT NULL,

geom geometry NOT NULL,

geohash VARCHAR(128) AS (st_geohash(geom,6)) VIRTUAL,

user varchar(50) DEFAULT NULL,

version int(11) DEFAULT NULL,

timestamp varchar(20) DEFAULT NULL,

uid int(11) DEFAULT NULL,

changeset int(11) DEFAULT NULL,

UNIQUE KEY idx_nodes_id (id),

SPATIAL KEY idx_nodes_geom (geom),

key idx_nodes_geohash(geohash)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

执行最常见的LBS需求:

查找某个经纬度周围5公里的节点信息,并根据距离进行排序

-- R树索引

SELECT id,

ST_Distance_Sphere(Point(120.167673,30.259498), geom) as distance,

ST_AsText(geom) geom

FROM nodes

WHERE ST_Contains( ST_MakeEnvelope(

Point((120.167673+(5/111)), (30.259498+(5/111))),

Point((120.167673-(5/111)), (30.259498-(5/111)))

), geom )

ORDER BY distance LIMIT 10;

-- GeoHash

-- ST_Geohash

SELECT id,

ST_Distance_Sphere(Point(120.167673,30.259498), geom) as distance,

ST_AsText(geom) geom

FROM nodes

WHERE geohash IN ('wtmknk','wtmkn6','wtmkne','wtmkn5','wtmknh','wtmkns','wtmknd','wtmkn4','wtmkn7')

ORDER BY distance LIMIT 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值