我的数据库中是否需要空间索引?

时间:2010-03-31 22:30:28

标签: database gis geospatial spatial bounding-box

我正在设计一个需要在数据库中保存几何形状的应用程序。我还没有选择数据库管理系统。

在我的应用程序中,所有数据库查询都有一个边界框作为输入,作为输出,我想要该数据库中的所有形状。我知道具有空间索引的数据库用于这种应用程序。但是在我的应用程序中,可以是“给我x / y附近的对象”类型的查询或者在GIS应用程序中有用的其他更复杂的查询。

我计划拥有一个没有空间索引的数据库,并且查询类似于:

SELECT * FROM shapes WHERE x < max_x AND x > min_x AND y < max_y AND y > min_y

x (double)y (double)上有索引。我可以看到,我真的不需要一个具有空间索引的数据库,无论我的应用程序是否接近那种应用程序。

即使我想要附近的查询,那么我可以围绕这一点创建一个足够大的边界框。或者这会导致表现不佳吗?

我真的需要空间数据库吗?何时需要空间索引?

修改: 搜索查询实际上比我上面写的更先进,因为我处理几何形状我将输入一个边界框,它将返回多个形状(带有边界框)内部或干扰框中的查询。但在阅读了所有好的答案之后,我仍然认为我可以在没有空间索引的情况下做到这一点。

4 个答案:

答案 0 :(得分:2)

不,你不需要空间索引。

需要空间索引来计算物体之间的距离,看看一个点是否在另一个点的某个半径范围内,等等......大多数时候需要考虑地理坐标。南半球,北半球等......当你不得不考虑地球的曲线时,这一切都会改变距离。

如果你总是在寻找x和y,那么你可以同时获得两个项目的索引。所以...不是列x的索引和列y的索引,而是列x和y的索引组合。

答案 1 :(得分:2)

  

我真的需要空间数据库吗?

看起来你正在做的事情对你的应用程序来说会很好。

  

即使我愿意   附近的查询,然后我可以创建一个   那个足够大的边界框   点。

您可能需要考虑在Geohash上创建索引。建议使用此方法索引Google App Engine上的地理空间点,例如,索引功能受限。 (Source

  

何时需要空间索引?

在许多情况下,空间索引很有用。首先,空间索引不仅可以处理点,还可以处理折线,多边形和其他形状。此外,正如您已经提到的,有许多复杂的查询操作可以应用于空间数据,其中适当的空间索引是必不可少的。

答案 2 :(得分:2)

要添加现有的优秀答案,这里的表现可能会或可能不重要。

如果通过对x和y轴执行两个范围查询并获取结果的交集来模拟空间索引范围查询,那么您正在执行两个查询,这些查询可能会返回比交叉点之前所需的数据多得多的数据。

另一方面,这种查询本身由空间索引支持,因此可以有效地回答。

总而言之,如果您的空间查询是瓶颈,则需要使用空间索引。

答案 3 :(得分:1)

如果你没有超越你已经在做的事情,你就不需要空间索引或GIS。但是,我会仔细考虑您的要求是什么,以及应用程序增长需要GIS系统的机会。对于这种转变,它比早于计划更好。

GIS为您提供了几个优势。首先,GIS具有特殊的形状列,用于存储几何所需的所有内容。它管理空间参考,协调元数据等.GIS提供了强大的方法,可以根据空间关系查询数据并修改几何(联合,提取,缓冲等)。它处理点,线,多边形等。您可以从拓扑操作中获取新形状。此外,几乎所有的GIS系统都提供了渲染数据的方法(这实际上取决于您选择的GIS,但是当它存在时,它可以为您节省大量的工作量。)

如果您拥有真正的GIS环境,则只需要空间索引。如果您确实选择了GIS环境,是的,请使用空间索引 - 您真的不想在没有它们的情况下工作。