Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


11.5.3.6 空間インデックスの作成

MyISAM テーブルでは、MySQL は、通常のインデックスを作成するための似た構文を使用するが、SPATIAL キーワードを使用して、空間インデックスを作成できます。空間インデックスのカラムは、NOT NULL と宣言する必要があります。次の各例では空間インデックスの作成方法を示します。

  • CREATE TABLE を使用する場合:

    CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g)) ENGINE=MyISAM;
    
  • ALTER TABLE を使用する場合:

    ALTER TABLE geom ADD SPATIAL INDEX(g);
    
  • CREATE INDEX を使用する場合:

    CREATE SPATIAL INDEX sp_index ON geom (g);
    

SPATIAL INDEX は R ツリーインデックスを作成します。空間カラムの非空間インデックスをサポートするストレージエンジンでは、B ツリーインデックスが作成されます。空間値に対する B ツリーインデックスは、正確な値の検索に役立ちますが、範囲スキャンには役立ちません。

空間カラムのインデックス作成の詳細については、セクション13.1.13「CREATE INDEX 構文」を参照してください。

空間インデックスを削除するには、次のように ALTER TABLE または DROP INDEX を使用します。

  • ALTER TABLE を使用する場合:

    ALTER TABLE geom DROP INDEX g;
    
  • DROP INDEX を使用する場合:

    DROP INDEX sp_index ON geom;
    

例: テーブル geom に 32,000 件を超える幾何図形が含まれていて、それらの図形が型 GEOMETRY のカラム g に格納されているものとします。またこのテーブルには、オブジェクト 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 geom ADD SPATIAL INDEX(g) ENGINE=MyISAM;
Query OK, 32376 rows affected (4.05 sec)
Records: 32376  Duplicates: 0  Warnings: 0

User Comments
Sign Up Login You must be logged in to post a comment.