我在SQL Server数据库中有大量照片(约10百万),地理坐标列可以是NULL或NOT NULL(未放置或放置在地图上)。
我还在此地理信息上创建了一个空间索引。
现在我正在尝试选择某个多边形内的所有照片。
有两种方法可以存储不在地图上的照片:
如果我将NULL分配给地图上没有的所有照片的地理位置,那么这种查询的执行速度太慢(因为我不知道,空间索引根本不适用于NULL列。)
如果我将POINT(0 0)
分配给地图上没有的所有照片的地理位置,则性能良好,除了此零点POINT(0 0)
的情况。此类请求也会返回错误的照片(地图上不存在这些照片)。
我如何克服这些问题?
我应该添加包含NULL或NOT NULL位的列,并从两列创建索引(此列和地理信息)?
UPDATE 我尝试从两列创建索引,但这是不可能的,因为空间索引只包含一个包含地理信息的列(MSDN)。
答案 0 :(得分:2)
您使用的是哪个版本的SQL服务器? 2008和2008 R2中存在可空空间列的已知问题 请查看我对同一主题的问题:SQL Server 2008 Performance on nullable geography column with spatial index
我通过使用单独的表来存储空间数据类型来解决此问题。 在我的项目中,我有一个带有Id列,纬度和经度列的地址表 然后我有一个AddressCoordinate表,它具有地址Id的外键约束和Geography列。 最后,我有一个脚本来填充缺少有效的AddressCoordinates。
答案 1 :(得分:0)
据我所知,我的问题有两个解决方案:
POINT(0 0)
移动到远北点POINT(0 90)
。此解决方案并不理想,但工作且不需要更改SQL Server版本。