Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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中。该表还具有用于存储对象ID值的AUTO_INCREMENTfid

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