Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Creating Spatial Indexes

13.4.10 创建空间索引

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

  • 使用 CREATE TABLE

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

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

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

SPATIAL INDEX 创建一个 R-tree 索引。对于支持非空间索引的存储引擎,引擎将创建一个 B-tree 索引。B-tree 索引在空间值的精确值查找中很有用,但不适合范围扫描。

优化器可以使用在 SRID 限制的列上定义的空间索引。有关更多信息,请参阅 第 13.4.1 节,“空间数据类型”第 10.3.3 节,“空间索引优化”

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

要删除空间索引,请使用 ALTER TABLEDROP 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 个几何体,这些几何体存储在列 g 中,类型为 GEOMETRY。该表还具有一个 AUTO_INCREMENTfid,用于存储对象 ID 值。

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