PostGIS中能否为几何类型创建索引?需单独存储类型吗?
PostGIS按几何类型查询的索引方案
- 不需要单独存储几何类型到额外列,直接基于PostGIS提供的几何类型函数创建函数索引即可满足需求。
1. 按几何类型查询的基础写法
你可以用GeometryType()函数直接过滤几何类型,示例SQL:
SELECT * FROM your_geom_table WHERE GeometryType(geom_column) IN ('POINT', 'POLYGON', 'MULTIPOLYGON');
如果习惯用带前缀的类型名,也可以用ST_GeometryType(),它返回的是ST_Point、ST_Polygon这类格式。
2. 创建函数索引优化查询性能
针对上述查询,直接创建基于GeometryType()的函数索引就行,语句如下:
CREATE INDEX idx_geom_column_type ON your_geom_table (GeometryType(geom_column));
创建完成后,当你执行上面的类型过滤查询时,PostgreSQL会自动使用这个索引,避免全表扫描。
补充说明
- 函数索引的关键是:查询时使用的函数和创建索引时的函数必须完全一致,否则索引不会生效。
- 如果只是偶尔按类型查询,全表扫描的开销不大,也可以不用建索引;但频繁查询的话,函数索引能显著提升效率。
内容的提问来源于stack exchange,提问作者Him
相关产品推荐
相关产品推荐

