MySQL数据类型 - 空间数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据类型 - 空间数据类型 相关的知识,希望对你有一定的参考价值。
获取空间数据
存储在表中的几何值可以用内部格式获取,也可以将其转换为WKT或WKB格式。
●获取内部格式的空间数据:
在表到表传输中,使用内部格式获取几何值非常有用:
●获取WKT格式的空间数据:
ST_AsText()函数的作用是:将几何图形从内部格式转换为WKT字符串。
●获取WKB格式的空间数据:
ST_AsBinary()函数的作用是:将几何图形从内部格式转换为包含WKB值的BLOB。
优化空间分析
对于MyISAM和InnoDB表,可以使用SPATIAL索引优化包含空间数据的列的搜索操作。最典型的操作是:
●搜索包含给定点的所有对象的点查询
●搜索与给定区域重叠的所有对象的区域查询
mysql对空间列上的SPATIAL索引使用具有二次分割的R树。使用几何体的最小边界矩形(MBR)构建SPATIAL索引。对于大多数几何体,MBR是包围几何体的最小矩形。对于水平或垂直的linestring,MBR是一个退化为linestring的矩形。对于一个点,MBR是一个退化为该点的矩形。
也可以在空间列上创建普通索引。在非SPATIAL索引中,必须为除POINT列之外的任何空间列声明一个前缀。
MyISAM和InnoDB同时支持SPATIAL索引和非SPATIAL索引。其他存储引擎支持非SPATIAL索引。
创建空间索引
对于InnoDB和MyISAM表,MySQL可以使用类似于创建常规索引的语法创建空间索引,但是使用SPATIAL关键字。空间索引中的列必须声明为NOT NULL。以下示例演示如何创建空间索引:
●使用 CREATE TABLE:
●使用 ALTER TABLE:
●使用 CREATE INDEX:
SPATIAL INDEX创建R树索引。对于支持空间列的非空间索引的存储引擎,引擎将创建B树索引。空间值上的B树索引对于精确的值查找非常有用,但对于范围扫描则没用。
优化器可以使用有SRID约束的列上定义的空间索引。
要删除空间索引,请使用ALTER TABLE或DROP INDEX:
●使用 ALTER TABLE:
●使用 DROP INDEX:
示例:假设一个表geom包含32000多个几何图形,这些几何图形存储在GEOMETRY类型的g列中。该表还有一个AUTO_INCREMENT列fid,用于存储对象ID值。
要在g列上添加空间索引,请使用以下语句:
使用空间索引
对于WHERE子句使用MBRContains() 或者 MBRWithin()等函数的查询,优化器将调查是否可以在搜索中使用可用的空间索引。以下查询将查找给定矩形中的所有对象:
使用EXPLAIN检查此查询的执行方式:
检查没有空间索引会发生什么:
不使用空间索引执行SELECT语句会产生相同的结果,但会导致执行时间从0.00秒增加到0.46秒:
官方文档地址:
https://dev.mysql.com/doc/refman/8.0/en/fetching-spatial-data.html
以上是关于MySQL数据类型 - 空间数据类型 的主要内容,如果未能解决你的问题,请参考以下文章