设计的PostGIS数据库...点表和多边形表...如何提高效率?

时间:2016-06-23 04:03:25

标签: postgresql database-design postgis

这是一个概念性的问题,但我很久以前就应该在这个论坛上提出这个问题了。

我有一个PostGIS数据库,里面有很多表。我已经研究了一些关于在数据库中使用密钥的方法,但是我不确定如何在动态的点数据的情况下合并密钥并且随着时间的推移而增加。

我将点数据存储在一个表中,并且这些数据每天都在增长。它现在约有1000万行,每年大约可能增加1000万行。有lat,lon,time和the_geom列。

我还有其他几个表,每个表代表不同的多边形组(将变换的shapefile转换为带有shp2pgsql的表),如县,州等。

我正在编写将点数据与空间表相关联的查询,以查看点是否在多边形内部,从而导致像过去24小时内的X多边形中的55个点"等等。

问题是,我没有将点表与其他表相关联的密钥。我认为这可能会抑制查询效率,但我不确定。

我知道这个问题相当模糊,我很乐意澄清任何事情,但我在桌子上基本上有一堆点,我在空间上比较其他表,而且我'我试图找到最好的设计方法。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果您还没有,则应在点和多边形表上构建空间索引。

无论如何,空间比较通常比数字比较慢。

因此,在引用其他表的点表中添加一个或多个键,并在选择查询而不是空间操作中使用它们肯定会加快。 显然,插入速度会慢一些,但考虑到你给出的数字(每年1000万),这应该不是问题。

可能只是将外键添加到最小的实体(例如城市)并加入其他实体以获得结果(国家,州......)将比空间比较更快。

答案 1 :(得分:0)

Foreign keys (and other constraints) are not needed to query.此外,它们作为结果出现在任何适合于每个良好设计原则的应用程序的设计中。

他们只是告诉DBMS,表中列列表下的值列表也会在某些表的列列表下的其他位置显示为值列表。 (为避免错误和改进优化。)

您仍然希望列中涉及连接的索引。例如,您可能希望两个表中的X坐标以相同的顺序排序。这与一列的值是否构成另一列的子集无关,即外键约束是否在它们之间成立。