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