跳到主要内容

创建空间索引

seekdb 支持使用 SPATIAL 关键字创建空间索引,建表时空间索引列必须声明为 NOT NULL。支持在存储(STORED)生成列上创建空间索引,不支持在虚拟(VIRTUAL)生成列上创建。

约束

  • 创建空间索引的列定义中必须包含 NOT NULL 约束。
  • 创建了空间索引的列需要已经定义 SRID,否则在该列上建的空间索引在查询时无法生效。
  • 如果是在 STORED 生成列上创建空间索引,则创建列时 DDL 必须显式指定 STORED 关键字。如果在创建生成列的时候没有指定 VIRTUAL 或者 STORED 关键字,那么默认创建 VIRTUAL 生成列。
  • 在创建了索引之后,比较的时候使用列定义中的 SRID 所对应的坐标系。空间索引存储了几何对象的 MBR(Minimum Bounding Rectangle)构建,MBR 的比较方式也依赖于 SRID。

准备工作

使用 GIS 功能前,需配置 GIS meta 数据。在连接到服务器后,执行如下命令将 default_srs_data_mysql.sql 文件导入到数据库中:

-- module 表示待导入的模块。
-- infile 表示待导入 sql 文件的相对路径。
ALTER SYSTEM LOAD MODULE DATA module=gis infile = 'etc/default_srs_data_mysql.sql';

语句语法具体说明请参见 LOAD MODULE DATA

返回以下结果代表导入数据文件成功:

Query OK, 0 rows affected

示例

以下示例展示如何在常规列上创建空间索引:

  • 使用 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);

以下示例展示如何删除空间索引:

  • 使用 ALTER TABLE
ALTER TABLE geom DROP INDEX g;
  • 使用 DROP INDEX
DROP INDEX g ON geom;