MySQL の空間索引の使用例

概要

MySQL の空間索引(SPATIAL INDEX)を用いて、座標データを効率的に検索する例を示す。POINT 型の列に空間索引を作成し、Well-Known Text(WKT)から幾何データを生成する手順を扱う。

目次

【サイト内の関連ページ】

MySQL 活用ガイド

テーブル定義の実装例

座標値 x, y と、それらから生成する POINT 型の列 pt を持つテーブルを定義する。空間索引を作成する列は NOT NULL でなければならないため、pt を NOT NULL とする。

CREATE TABLE GDATA (
    x DOUBLE NOT NULL,
    y DOUBLE NOT NULL,
    pt POINT NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

POINT 型データの格納

座標値 x, y から WKT 形式の文字列を組み立て、ST_PointFromText() で POINT 型に変換して pt 列へ格納する。

UPDATE GDATA SET pt = ST_PointFromText(
    CONCAT('POINT(', x, ' ', y, ')')
);

空間索引を持つテーブルの作成とデータ投入

pt 列に空間索引(SPATIAL KEY)を定義したテーブルを作成し、GDATA から座標データを投入する。

CREATE TABLE GDATA2 (
    x DOUBLE NOT NULL,
    y DOUBLE NOT NULL,
    pt POINT NOT NULL,
    SPATIAL KEY `sp_index` (`pt`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

INSERT INTO GDATA2(x, y, pt)
SELECT x, y, pt FROM GDATA;