# 11.4.10 创建空间索引
为了InnoDB
和MyISAM
表,MySQL 可以使用类似于创建常规索引的语法创建空间索引,但使用空间
关键词。必须声明空间索引中的列非空
.以下示例演示了如何创建空间索引:
和
创建表
:CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326, SPATIAL INDEX(g));
和
更改表
:CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); ALTER TABLE geom ADD SPATIAL INDEX(g);
和
创建索引
:CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); CREATE SPATIAL INDEX g ON geom (g);
空间索引
创建一个 R-tree 索引。对于支持空间列的非空间索引的存储引擎,引擎会创建 B 树索引。空间值的 B-tree 索引对于精确值查找很有用,但对于范围扫描无效。
优化器可以使用在受 SRID 限制的列上定义的空间索引。有关详细信息,请参阅第 11.4.1 节,“空间数据类型”, 和第 8.3.3 节,“空间索引优化”.
有关索引空间列的更多信息,请参阅第 13.1.15 节,“CREATE INDEX 语句”.
和
更改表
:ALTER TABLE geom DROP INDEX g;
和
删除索引
:DROP INDEX g ON geom;
示例:假设一个表
几何
包含超过 32,000 个几何图形,存储在列中g
类型几何学
.该表还有一个自动递增
柱子菲德
用于存储对象 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