Documentation Home
MySQL 8.0 参考手册  / 第 11 章数据类型  / 11.4 空间数据类型  /  11.4.9 创建空间索引

11.4.9 创建空间索引

对于InnoDBMyISAM 表,MySQL 可以使用类似于创建常规索引的语法创建空间索引,但使用 SPATIAL关键字。必须声明空间索引中的列NOT NULL。以下示例演示了如何创建空间索引:

  • CREATE TABLE

    Press CTRL+C to copy
    CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));
  • ALTER TABLE

    Press CTRL+C to copy
    CREATE TABLE geom (g GEOMETRY NOT NULL); ALTER TABLE geom ADD SPATIAL INDEX(g);
  • CREATE INDEX

    Press CTRL+C to copy
    CREATE TABLE geom (g GEOMETRY NOT NULL); CREATE SPATIAL INDEX g ON geom (g);

SPATIAL INDEX创建 R 树索引。对于支持空间列的非空间索引的存储引擎,引擎会创建 B 树索引。空间值的 B 树索引对精确值查找很有用,但对范围扫描没有用。

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

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

  • ALTER TABLE

    Press CTRL+C to copy
    ALTER TABLE geom DROP INDEX g;
  • DROP INDEX

    Press CTRL+C to copy
    DROP INDEX g ON geom;

示例:假设一个表geom包含 32,000 多个几何图形,这些几何图形存储在 gtype 的列中GEOMETRY。该表还有一个用于存储对象 ID 值 的AUTO_INCREMENT列 。fid

Press CTRL+C to copy
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,请使用以下语句:

Press CTRL+C to copy
mysql> ALTER TABLE geom ADD SPATIAL INDEX(g); Query OK, 32376 rows affected (4.05 sec) Records: 32376 Duplicates: 0 Warnings: 0