OceanBaseデータベースは SPATIAL キーワードを使用してスペースインデックスを作成することをサポートしています。テーブル作成時にスペースインデックス列は NOT NULL で宣言する必要があります。STORED型の生成列にはスペースインデックスを作成できますが、VIRTUAL型の生成列には作成できません。
制約
- スペースインデックスを作成する列の定義には
NOT NULL制約が含まれている必要があります。 - スペースインデックスを作成する列には既にSRIDが定義されていなければなりません。そうでない場合、その列に作成されたスペースインデックスはクエリ時に有効になりません。
- STORED型の生成列にスペースインデックスを作成する場合、列を作成する際のDDLで明示的に
STOREDキーワードを指定する必要があります。生成列を作成する際にVIRTUALまたはSTOREDキーワードを指定しなかった場合、デフォルトでVIRTUAL型の生成列が作成されます。 - インデックス作成後の比較では、列定義内のSRIDに対応する座標系が使用されます。スペースインデックスは幾何オブジェクトのMBR(Minimum Bounding Rectangle)に基づいて格納され、MBRの比較方法もSRIDに依存します。
前提条件
GIS機能を使用する前に、業務テナントでGISメタデータを設定する必要があります。サーバーに接続した後、以下のコマンドを実行して default_srs_data_mysql.sql ファイルをデータベースにインポートします:
注意
このインポートコマンドはSYSテナントでのみ実行できます。コマンド実行時にデータはプライマリテナントに書き込まれ、スタンバイテナントに同期されます。
-- module はインポートするモジュールを表します。
-- tenant はインポートするテナントを表します。
-- infile はインポートするSQLファイルの相対パスを表します。
ALTER SYSTEM LOAD MODULE DATA module=gis tenant=mysql infile = 'etc/default_srs_data_mysql.sql';
ステートメント構文の詳細については、LOAD MODULE DATAを参照してください。
以下の結果が返された場合、データファイルのインポートに成功しました:
Query OK, 0 rows affected
例
以下の例は、通常の列にスペースインデックスを作成する方法を示しています:
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);
以下の例は、スペースインデックスを削除する方法を示しています:
ALTER TABLEを使用する場合:
ALTER TABLE geom DROP INDEX g;
DROP INDEXを使用する場合:
DROP INDEX g ON geom;