mysql对GIS空间数据的支持,包括创建空间索引
2023-09-14 09:12:27 时间
CREATE TABLE tb_geo( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(128) NOT NULL, pnt POINT NOT NULL, SPATIAL INDEX `spatIdx` (`pnt`) <!-- 1、创建表时创建空间索引 --> )ENGINE=MYISAM DEFAULT CHARSET=utf8; <!-- 数据库表引擎设置为 MYISAM--> <!-- 2、已经存在的表上创建索引 --> <!-- ALTER TABLE tb_geo ADD SPATIAL INDEX spatIdx(pnt); --> <!-- 3、使用CREATE INDEX语句创建索引,语法如下 --> <!-- CREATE SPATIAL INDEX spatIdx ON t7(g) --> <!-- 删除索引 --> <!-- ALTER TABLE book DROP INDEX UniqidIdx --> <!-- 表描述信息--> DESCRIBE tb_geo; <!-- 插入数据 --> INSERT INTO `tb_geo` VALUES( NULL, 'a test string', POINTFROMTEXT('POINT(15 20)')); <!-- 查询 --> SELECT id,NAME,ASTEXT(pnt) FROM tb_geo; SELECT id,NAME,X(pnt),Y(pnt) FROM tb_geo; <!-- 空间查询示例 --> SELECT ASTEXT(pnt) FROM tb_geo WHERE MBRWITHIN(pnt,GEOMFROMTEXT('Polygon((0 0,0 30,30 30,30 0,0 0))')); <!-- 删除表 --> DROP TABLE tb_geo; <!-- 几种空间对象比较方法 --> SET @g1 = GEOMFROMTEXT('Polygon((0 0,0 3,3 3,3 0,0 0))'); SET @g2 = GEOMFROMTEXT('Point(1 1)'); <!-- 注意:比较的都是外包络几何类型对象 --> <!-- 包含 --> SELECT MBRCONTAINS(@g1,@g2), MBRCONTAINS(@g2,@g1), MBRCONTAINS(@g1,@g1); <!-- 被包含 --> SELECT MBRWITHIN(@g2,@g1),MBRWITHIN(@g1,@g2); <!-- 不相交 --> SELECT MBRDISJOINT(@g1,@g2); <!-- 相等 --> SELECT MBREQUAL(@g1,@g2); <!-- 相交 --> SELECT MBRINTERSECTS(@g1,@g2); <!-- 重叠 --> SELECT MBROVERLAPS(@g1,@g2); <!-- 相切 --> SELECT MBRTOUCHES(@g1,@g2);
注:
在最新发布的MySQL 5.7.4实验室版本中,InnoDB存储引擎新增了对于几何数据空间索引的支持。
在此之前,InnoDB将几何数据存储为BLOB(二进制大对象)数据,在空间数据上只能创建前缀索引,当涉及空间搜索时非常低效,尤其是在涉及复杂的几何数据时。在大多数情况下,获得结果的唯一方式是扫描表。
新版本MySQL中,InnoDB支持空间索引,通过R树来实现,使得空间搜索变得高效。
InnoDB空间索引也支持MyISAM引擎现有的空间索引的语法,此外,InnoDB空间索引支持完整的事务特性以及隔离级别。
目前,InnoDB空间索引只支持两个维度的数据,MySQL开发团队表示有计划支持多维。此外,开发团队正在做更多关于性能方面的工作,以使其更加高效。
相关文章
- MySQL索引优化(索引三表优化案例)
- Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
- MySQL索引原理及慢查询优化
- 【MySQL】now()与sysdate()的区别
- MySQL存储过程实现动态执行SQL
- MySQL · TokuDB · TokuDB索引结构--Fractal Tree
- MySQL高可用性之Keepalived+Mysql(双主热备)
- 【问题解决方案】MySQL安装后无法启动-net start mysql服务名无效
- mysql 重新整理——索引简介[七]
- mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file (/opt/mysql/data/mysql.pid) 的解决方法
- Mysql索引数据结构有多个选择,为什么一定要是B+树呢?_面试 (MySQL 索引为啥要选择 B+ 树)
- mysql聚簇索引的页分裂原理实例分析
- Starting MySQL. ERROR! The server quit without updating PID file (/data/mysql/mysql.pid).
- 【ChatGPT】我同时问 ChatGLM / Sage / ChatGPT :MySQL 添加索引之后 数据库做了些什么? 看看它们分别怎么回答……
- MySQL 聚簇索引和非聚簇索引 & mysql 索引为啥用b 树
- Groonga开源搜索引擎——列存储做聚合,没有内建分布式,分片和副本是随mysql或者postgreSQL作为存储引擎由MySQL自身来做分片和副本的
- mysql导出 数据库字典
- mysql 分库分表
- MySQL查看查询的成本
- Mysql设置表主键
- Mysql入门技能树-索引
- [MySQL] 解决办法: Error: Transaction test error: file /etc/my.cnf from install of mysql-community-server