【问题标题】:Geospatial data in SQLSQL 中的地理空间数据
【发布时间】:2011-05-09 20:49:08
【问题描述】:

我最近一直在尝试地理数据类型,我很喜欢它。但我无法决定是否应该从当前模式转换为地理类型,该模式将纬度和经度存储在两个单独的数字(9,5)字段中。我已经计算出这两种类型的大小和表示一个点的纬度/经度方式是单个点的 28 个字节,而地理类型是 26 个。空间上的增益不是很大,但在执行地理空间操作(相交、距离测量等)方面有很大的改进。 ) 目前使用笨拙的存储过程和标量函数处理。我想知道的是指数。地理数据类型是否需要更多空间来索引数据?我有一种感觉,即使存储在列中的实际数据较少,我认为地理空间索引的工作方式最终会为它们分配更大的空间。

附:附带说明一下,除非明确告知使用 WITH(INDEX()) 子句,否则 SQL Server 2008(不是 R2)似乎不会自动搜索地理空间索引

【问题讨论】:

  • 我不想成为“那个人”,但试试看会发生什么!如果对整个数据集执行此操作不可行,请选择一个子集并比较这两种方法的子集。
  • 不幸的是,尝试不是一种选择,因为我们正在谈论数千万条记录。尝试一个子集并不是一个现实的测试,因为在我的经验中,当某些东西在较小的规模上表现完美时,这在生产中是一场彻底的灾难。
  • 您专门询问的是空间,而不是性能(除非我遗漏了什么)。因此,取 10000 行(例如)并比较这两种策略是一个很好的测试。
  • 好吧,即使我这样做,也只会回答是/否。但我真的很想知道为什么。

标签: sql-server geospatial sqlgeography


【解决方案1】:

在我看来,您绝对应该只使用空间类型。空间类型针对空间查询进行了优化,如果您需要空间查询,那么我认为这是一个简单的选择。

作为副作用,您可以摆脱地理函数和过程,因为它们(可能)内置在 SQL Server 2008 中。但需要注意的是,您可能需要花一些时间优化空间索引,但这取决于你的具体情况。

【讨论】:

  • 是的,我就是这么做的。空间索引似乎确实占用了更多空间,但一旦优化,它们会提供值得额外磁盘空间的性能提升。
【解决方案2】:

我了解您正在尝试在两者之间保留其中之一,但您可能需要考虑同时保留两者。如果您将数据导出到形状文件中,让 lat lon 字段与 geom 字段一起使用是一种常见的做法。

【讨论】:

  • 我刚刚阅读了您关于记录数的评论:P。我认为您不会将其导出到不同的共振峰吗?
  • 好吧,数据库很难每天都按原样备份(因为它每天都在发生巨大变化)。复制 lat/long 会不必要地增加尺寸。
【解决方案3】:

我会保留两者。无需空间操作即可轻松查询特定要素的原始坐标非常有用。您可以了解原始点以及从它们创建新几何体的好处,以防您需要在不同的坐标系中使用它(例如,如果您的几何体在特定的投影中会丢失很多精度)到另一个)。

【讨论】:

  • 是的,但如果我继续“查询原始坐标”,这难道不违背我想要摆脱旧的做事方式的全部原因吗?另外,我们每天都在谈论数百万行。如果我不打算使用它,我会讨厌保留重复的数据。
  • 嗯,这取决于谁会读取数据。例如,不同公司的某些 IT 部门的测试人员与开发团队分开。测试人员不懂空间查询。对于他们来说,无需提取即可轻松快速查看内部纬度/经度值。如果您没有充分的理由存储它,那么我不会保留副本。
  • 是的,在我们公司,数据仅在后端使用,从不直接接触用户,每个开发人员都知道(或理解不会有问题)如何使用地理空间数据。但我想我已经回答了我的问题。
  • 是的 - 那时不需要保留它。
猜你喜欢
  • 2018-03-12
  • 2021-12-13
  • 1970-01-01
  • 2010-12-30
  • 2022-06-10
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多