文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  创建空间索引

13.4.10 创建空间索引

对于 InnoDBMyISAM 表,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 节“空间索引优化”

有关索引空间列的更多信息,请参阅 第 15.1.15 节“CREATE INDEX 语句”

要删除空间索引,请使用 ALTER TABLEDROP INDEX

示例:假设表 geom 包含超过 32,000 个几何图形,这些几何图形存储在 GEOMETRY 类型的 g 列中。该表还有一个 AUTO_INCREMENTfid 用于存储对象 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