创建空间索引
对于InnoDB
和MyISAM
表,MySQL可以使用类似于创建常规索引的语法创建空间索引,但是使用SPATIAL
关键字。必须声明空间索引中的列NOT NULL
。下面的示例演示如何创建空间索引:
与
CREATE TABLE
:CREATE TABLE geom (gGEOMETRY NOT NULLSRID 4326,SPATIAL INDEX (g));与
ALTER TABLE
:CREATE TABLE geom (gGEOMETRY NOT NULLSRID 4326);ALTER TABLE geomADD SPATIAL INDEX (g);与
CREATE INDEX
:CREATE TABLE geom (gGEOMETRY NOT NULLSRID 4326);CREATE SPATIAL INDEX gON geom (g);
SPATIAL INDEX
创建一个R树索引。对于支持空间列的非空间索引的存储引擎,该引擎将创建B树索引。空间值的B树索引对于精确值查找很有用,但对范围扫描则无用。
优化器可以使用在SRID限制的列上定义的空间索引。有关更多信息,请参见“空间数据类型”和“空间索引优化”。
有关为空间列建立索引的更多信息,请参见“ CREATE INDEX语句”。
要删除空间索引,请使用ALTER TABLE
或DROP INDEX
:
与
ALTER TABLE
:ALTER TABLE geomDROP INDEX g;与
DROP INDEX
:DROP INDEX gON geom;
示例:假设一个表geom
包含32,000多个几何,这些几何存储在g
type 列中GEOMETRY
。该表还具有用于存储对象ID值的AUTO_INCREMENT
列fid
。
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 geomADD SPATIAL INDEX (g); Query OK, 32376 rows affected (4.05 sec) Records: 32376 Duplicates: 0 Warnings: 0