我认为这是隐含的,但我不是,当我有一个非空间索引,我可以改用使用空间索引的查询。例如,我有2,113,450点跨越了美国,并加载到了表格中。如果我想提取阿拉斯加州内的所有点,则可以执行一个空间查询,该查询使用点几何上的GIST索引与阿拉斯加州的几何进行比较,或者,我可以使用点数据(也已建立索引)中的“ state_alpha”字段,以返回所有具有“ state_alpha” =“ AK”的点。
您会问:“其中的空间部分在哪里?” 好吧,如果我需要在收集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