database – 空间索引与两个坐标索引
发布时间:2020-12-13 15:52:10 所属栏目:百科 来源:网络整理
导读:我有一个有两列的表:纬度和经度.我希望将所有对象都放在“矩形”(井,纬度/纬度坐标公制中的矩形)边界框内:最小 – 最大纬度和最小 – 最大经度.基本上归结为以下伪SQL: SELECT * FROM MyTable WHERE lat :maxlat AND lat :minlat AND lon :maxlon AND lon
我有一个有两列的表:纬度和经度.我希望将所有对象都放在“矩形”(井,纬度/纬度坐标公制中的矩形)边界框内:最小 – 最大纬度和最小 – 最大经度.基本上归结为以下伪SQL:
SELECT * FROM MyTable WHERE lat < :maxlat AND lat > :minlat AND lon < :maxlon AND lon > :minlon 索引表格的最佳解决方案是什么?一个两列索引?两列上有两个索引?空间索引? 我想知道在这种情况下是否真的需要空间索引,因为你需要一个特殊的列,特定的库,所有这些都是以牺牲数据库的可移植性和简单性为代价的. 注意:我想保持这个问题与数据库无关,但为了完整起见,我提到了我正在使用PostGreSQL 8,没有(现在)PostGIS. 解决方法
你的PostgreSQL版本是什么:8.0,8.1等?如果您有“高版本”,则可以尝试将lat和lon列包含为点类型的唯一列.像这样:
create table MyTable ( ... lat integer,lon integer,coor point,... ); insert MyTable (...,lat,lon,coor,...) values (...,lat1,lon1,'(lat1,lon1)',...) ... 并创建测试所需的索引: create index MyTable_lat on MyTable (lat); create index MyTable_lon on MyTable (lon); create index MyTable_coor on MyTable using gist (coor); 现在,您可以更快地测试哪种类型的查询: explain analyze select * from MyTable where lat < :maxlat and lat > :minlat and lon < :maxlon and lon > :minlon 要么: explain analyze select * from MyTable where coor <@ box '((:minlat,:minlon),(:maxlat,:maxlon))' 我在PostgreSQL 9上做了测试(有20000条记录),第二个选项更快. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |