MySQL能够使用与创建正规索引类似的语法创建空间索引,但使用了SPATIAL关键字进行了扩展。对于目前编制了索引的空间列,必须将其声明为NOT NULL。在下面的示例中,介绍了创建空间索引的方法。
· 对于CREATE TABLE:
· mysql> CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));
· 对于ALTER TABLE:
· mysql> ALTER TABLE geom ADD SPATIAL INDEX(g);
· 对于CREATE INDEX:
· mysql> CREATE SPATIAL INDEX sp_index ON geom (g);
对于MyISAM表,SPATIAL INDEX负责创建R-tree索引。对于支持空间索引的其他存储引擎,SPATIAL INDEX能够创建B-tree索引。对于准确的值查找而不是范围扫描,作用在空间值上的B-tree索引很有用。
要想撤销空间索引,可使用ALTER TABLE或DROP INDEX:
· 对于ALTER TABLE:
· mysql> ALTER TABLE geom DROP INDEX g;
· 对于DROP INDEX:
· mysql> DROP INDEX sp_index ON geom;
示例:假定表geom包含32000以上的几何对象,它们保存在类型为GEOMETRY的列g中。该表还有用于保存对象ID值的AUTO_INCREMENT列。
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