MySQL 8.4 发行说明
对于 InnoDB
和 MyISAM
表,MySQL 可以使用类似于创建常规索引的语法创建空间索引,但使用 SPATIAL
关键字。空间索引中的列必须声明为 NOT NULL
。以下示例演示如何创建空间索引
使用
CREATE TABLE
CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326, SPATIAL INDEX(g));
使用
ALTER TABLE
CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); ALTER TABLE geom ADD SPATIAL INDEX(g);
使用
CREATE INDEX
CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); CREATE SPATIAL INDEX g ON geom (g);
SPATIAL INDEX
创建 R 树索引。对于支持空间列非空间索引的存储引擎,该引擎会创建一个 B 树索引。空间值的 B 树索引对于精确值查找很有用,但不适合范围扫描。
优化器可以使用为受 SRID 限制的列定义的空间索引。有关更多信息,请参见 第 13.4.1 节,“空间数据类型” 和 第 10.3.3 节,“SPATIAL 索引优化”.
有关对空间列进行索引的更多信息,请参见 第 15.1.15 节,“CREATE INDEX 语句”.
要删除空间索引,请使用 ALTER TABLE
或 DROP INDEX
使用
ALTER TABLE
ALTER TABLE geom DROP INDEX g;
使用
DROP INDEX
DROP INDEX g ON geom;
示例:假设表 geom
包含超过 32,000 个几何图形,这些几何图形存储在类型为 GEOMETRY
的 g
列中。该表还有一个 AUTO_INCREMENT
列 fid
用于存储对象 ID 值。
mysql> DESCRIBE geom;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| fid | int(11) | | PRI | NULL | auto_increment |
| g | geometry | | | | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT COUNT(*) FROM geom;
+----------+
| count(*) |
+----------+
| 32376 |
+----------+
1 row in set (0.00 sec)
要在 g
列上添加空间索引,请使用以下语句
mysql> ALTER TABLE geom ADD SPATIAL INDEX(g);
Query OK, 32376 rows affected (4.05 sec)
Records: 32376 Duplicates: 0 Warnings: 0