これは暗黙的だと思いますが、代わりに使用できる非空間インデックスがある場合、クエリに空間インデックスを使用しません。たとえば、米国にまたがる2,113,450ポイントがテーブルにロードされています。アラスカ州内にあるすべてのポイントを取得する場合、ポイントジオメトリのGISTインデックスを使用した空間クエリを実行して、アラスカ州のジオメトリと比較するか、または「state_alpha」= 'AK'を持つすべてのポイントを返すために、ポイントデータの "state_alpha"フィールド(インデックスも作成されます)。
「これの空間部分はどこですか」とあなたは尋ねますか?さて、Alaska_pointsを収集した後にさらに空間分析を行う必要がある場合は、最初に非空間クエリを使用してそれらのポイントジオメトリを収集する方が高速です。また、本当に大きなデータセットの場合、ルックアップフィールド(またはテーブル)を追加することでメリットが得られることも意味します。繰り返しますが、これはおそらく誰にでも明らかです。過去に空間インデックスのみが設定されたグローバルデータセットで共通のクエリが「国内のすべての機能」であったことがあるためです。インデックス付きのcountry_fipsフィールドを追加することで、多くのパフォーマンスを獲得しました。
以下に、EXPLAIN ANALYZEの結果をいくつか示します。(注:BBOXクエリを使用して、空間クエリを可能な限り効率的にしようとしました。状態のアウトラインを使用すると、遅くなります。)
# explain analyze select count(*) from gnis_names where state_alpha = 'AK';
Aggregate (cost=57359.45..57359.46 rows=1 width=0) (actual time=76.606.. 76.607 rows=1 loops=1)
<snip>
Total runtime: 76.676 ms
# explain analyze select count(*) from gnis_names where the_geom && GeomFromText('POLYGON((-179.14734 51.219862,-179.14734 71.3525606439998,179.77847 71.3525606439998,179.77847 51.219862,-179.14734 51.219862))',4326);
Aggregate (cost=27699.86..27699.87 rows=1 width=0) (actual time=86.523..86.524 rows=1 loops=1)
<snip>
Total runtime: 86.584 ms