• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 创建空间索引

    对于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限制的列上定义的空间索引。有关更多信息,请参见“空间数据类型”和“空间索引优化”。

    有关为空间列建立索引的更多信息,请参见“ CREATE INDEX语句”。

    要删除空间索引,请使用ALTER TABLEDROP INDEX

    • ALTER TABLE

      ALTER TABLE geom DROP INDEX g;
      
    • DROP INDEX

      DROP INDEX g ON geom;
      

    示例:假设一个表geom包含32,000多个几何,这些几何存储在gtype 列中GEOMETRY。该表还具有用于存储对象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