https://dev.mysql.com/doc/refman/8.0/ja/creating-spatial-indexes.html

version 8.0

InnoDB および MyISAM テーブルの場合、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 制限のあるカラムに定義された空間インデックスを使用できます。 詳細は、セクション11.4.1「空間データ型」およびセクション8.3.3「SPATIAL インデックス最適化」を参照してください。

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

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

例: テーブル 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