1

我在 SQL Server 数据库中有大量照片(约 1000 万张),其地理坐标列可以为 NULL 或 NOT NULL(未放置或放置在地图上)。

我还在这个地理信息上创建了一个空间索引。

现在我正在尝试选择某个多边形内的所有照片。

有两种方法可以存储不在地图上的照片:

  • 如果我将 NULL 分配给不在地图上的所有照片的地理位置,则此类查询的性能太慢(正如我所不理解的,空间索引根本不适用于 NULL 列)。

  • 如果我分配POINT(0 0)给不在地图上的所有照片的地理位置,则性能很好,除了这个零点的情况POINT(0 0)。此类请求也返回错误的照片(它们在地图上不存在)。

我怎样才能克服这些问题?

我应该添加包含 NULL 或 NOT NULL 位的列并从两列(此列和地理信息)创建索引吗?

更新我试图从两列创建索引,但这是不可能的,因为空间索引只包含一列带有地理信息(MSDN)。

4

2 回答 2

3

您使用的是什么版本的 SQL Server?2008 和 2008 R2 中的可空空间列存在一个已知问题请查看我关于同一主题的问题:SQL Server 2008 Performance on nullable geography column with spatial index

我通过有一个单独的表来存储空间数据类型解决了这个问题。在我的项目中,我有一个带有 Id 列、一个纬度和一个经度列的地址表然后我有一个 AddressCoordinate 表,它对地址的 Id 和一个地理列有一个外键约束。最后,我有一个脚本可以每天填充丢失的有效地址坐标。

于 2013-02-22T09:47:44.637 回答
0

据我了解,我的问题有两种解决方案:

  • 零点POINT(0 0)向远北点移动POINT(0 90)。此解决方案并不理想,但可以正常工作并且不需要更改 SQL Server 版本。
  • 通过执行以下脚本将 SQL Server 版本更改为 110(在此版本中修复了 NULL 错误):ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = 110
于 2013-02-28T10:02:47.587 回答