3

我有一个相当大的 SQLite 数据库来存储一些地理数据。我不能使用 GIS 扩展,而且我也希望一切都可以与其他数据库一起使用。

我的表结构如下:

tbl(float fromLon, float fromLat, float toLon, float toLat, binary binaryData)

我在数据库中存储了一些二进制数据(某物的多边形),并以 fromLon、fromLat -> toLon、toLat 的形式存储它的边界框。

接下来我有一些查询,比如“给我这个区域内的所有二进制数据(多边形)(reqLlon1,reqLat1)-(reqLon2,reqLat2)”。一个示例查询是:

SELECT binaryData
FROM tbl WHERE
(reqLon1 < toLon) AND
(reqLat1 < toLat) AND
(reqLon2 > fromLon) AND
(reqLat2 > fromLat) 

问题是,我似乎无法找到正确的索引来加快速度.. 一个简单的索引,比如

idx1(fromLon,fromLat,toLon,toLat)

行不通。我用 MySQL(相同的布局,相同的索引)尝试了同样的事情,它声明(解释 select ..)它只使用了索引长度的一半..

有人可以给我一个提示索引应该是什么样子吗?或者它可能是,这是不可能的?

4

1 回答 1

1

您应该考虑使用R*Tree 模块

R-Tree 是一种特殊的索引,专为进行范围查询而设计。R-Trees 最常用于地理空间系统,其中每个条目都是一个具有最小和最大 X 和 Y 坐标的矩形。给定一个查询矩形,R-Tree 能够快速找到包含在查询矩形内或与查询矩形重叠的所有条目。这个想法很容易扩展到三个维度,以便在 CAD 系统中使用。R-Trees 也可用于时域范围查找。

于 2012-06-10T17:02:38.980 回答