PostGISなカラムにインデックス

2009/08/01 | PostgreSQL

PostGISを使って空間座標を格納するカラムをテーブルに追加する際は、create文で一気に作るのではなく(本当は一気に作ることもできるだろうが)、最初に空間座標以外のカラムでテーブルをつくり、あとからPostGISの関数を使って空間座標カラムを追加する。専用の関数を使うのだから、それだけで事足りているのだろうと思っていたら、別途インデックスを作成することもできるようだ(言い方をかえると、別途作成しなくてはいけない)。

PostGISのマニュアルではこんな具合に書いてある。
CREATE INDEX [インデクス名] ON [テーブル名] USING GIST ( [ジオメトリカラム名] );

でもウェブを調べると、カラム名の後ろに半角スペースをつけて「GIST_GEOMETRY_OPS」というおまじないをつけてあることが多い。これの意味を調べたけど、今のところよくわからない。もうちょっと調べなくては。

インデックスを作成した後は、PostgreSQLがうまくインデックスを使ってくれるようにバキュームをかけておかなくてはいけないらしい(統計情報収集)。こういうことを知らなかったので、今までいかに何も考えずにデータベースを使っていたのかがばれてしまう。

VACUUM ANALYZE [テーブル名] [カラム名];

これで空間座標のカラムにインデックスが効いて、位置検索するときに速度向上が見込める(らしい)。数千行以上のデータを扱う際は入れておくべき、とのこと。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net