代码之家  ›  专栏  ›  技术社区  ›  Jonas

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

  •  8
  • Jonas  · 技术社区  · 15 年前

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

    在我的应用程序中,所有数据库查询都将有一个边界框作为输入,而作为输出,我需要该数据库中的所有形状。我知道具有空间索引的数据库用于这种应用程序。但在我的申请中 是“给我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 回复  |  直到 15 年前
        1
  •  2
  •   Daniel Vassallo    15 年前

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

    看起来您所做的工作对于您的应用程序来说很好。

    即使我想 在附近查询,然后我可以创建一个 周围足够大的边界框 点。

    您可能需要考虑在 Geohash 相反。该方法被推荐用于在谷歌应用程序引擎上索引地理空间点,例如,在索引功能有限的地方。( Source )

    什么时候需要空间索引?

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

        2
  •  2
  •   Wolph    15 年前

    不,您不需要空间索引。

    空间指标是计算物体之间的距离,看一个点是否在另一个点的某个半径内,等等。主要是当你需要考虑地理坐标时。南半球、北半球等…当你必须考虑到地球的曲线时,这一切都会稍微改变距离。

    如果你总是同时在寻找x和y,那么同时在这两个项目上都有一个索引会让你受益匪浅。所以…不是X列的索引和Y列的索引,而是X列和Y列的索引的组合。

        3
  •  2
  •   Laurynas Biveinis    15 年前

    为了增加现有的优秀答案,这里的性能可能重要,也可能不重要。

    如果通过对X轴和Y轴执行两个范围查询并获取结果的交集来模拟空间索引范围查询,那么可以执行两个查询,这两个查询可能会返回比交集之前需要的更多的数据。

    另一方面,这种查询本机由空间索引支持,因此将得到有效的回答。

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

        4
  •  1
  •   Jordan Parmer    15 年前

    如果你没有超越你已经做的,你不需要一个空间索引,也不需要一个地理信息系统。但是,我会仔细考虑您的需求是什么,以及应用程序不断增长需要一个GIS系统的可能性。这比提前计划好,而不是推迟计划。

    地理信息系统给你几个优势。首先,GIS具有特殊的形状列,用于存储有关几何图形所需的所有内容。它管理空间引用、坐标元数据等。地理信息系统提供了基于空间关系查询数据和修改几何图形(联合、提取、缓冲区等)的强大方法。它处理点、线、多边形等。您可以从拓扑操作中派生新形状。此外,几乎所有的地理信息系统都提供了呈现数据的方法(这实际上取决于您选择什么地理信息系统,但当它出现时,可以为您节省大量的工作)。

    如果您有一个真正的地理信息系统环境,那么您只需要空间索引。如果你确实选择了一个地理信息系统环境,是的,使用空间索引——你真的不想没有它们就工作。