MySQL
では、通常のインデックスを作成する場合と似た構文を使って空間インデックスを作成できますが、空間インデックスの場合は
SPATIAL
キーワードを付けます。現在のところ、空間インデックスに含まれるカラムでは
NOT NULL
を宣言する必要があります。次の各例では空間インデックスの作成方法を示します。
CREATE
TABLE
を使用する場合:
CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));
ALTER TABLE
を使用する場合:
ALTER TABLE geom ADD SPATIAL INDEX(g);
CREATE
INDEX
を使用する場合:
CREATE SPATIAL INDEX sp_index ON geom (g);
MyISAM
テーブルで
SPATIAL INDEX
を指定すると、R
木インデックスが作成されます。空間カラムの非空間インデックスをサポートするストレージエンジンでは、B
木インデックスが作成されます。空間値の B
木インデックスは、特定の値を検索するには便利ですが、範囲を走査する場合には適しません。
空間カラムのインデックス作成の詳細については、項8.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);
Query OK, 32376 rows affected
(4.05 sec) Records: 32376 Duplicates: 0 Warnings: 0