SQL 空间连接 - 空值导致问题

SQL Spatial Join - Null Values Causing Problems

我有两个 table 点数据。 Table 1 - 无空分。
Table 2 - 大约一半的点为空。

查询:

SELECT
  *
FROM
  Table1 
INNER JOIN
  Table2 
ON
  Table1.Point.STBuffer(2.5).STIntersects(Table2.Point) = 1
WHERE
  Table1.Point IS NOT NULL
  AND Table2.Point IS NOT NULL

需要 8 个多小时才能完成。

如果我像这样将数据复制到临时 table:

INSERT INTO TempTable SELECT * FROM Table2 WHERE Point IS NOT NULL

同样的查询大约需要 40 秒。

如果我重新添加一些空数据。

INSERT INTO TempTable SELECT TOP 10000 * FROM Table2 WHERE Point IS NULL

它可以追溯到永远。

发生了什么事?

空间索引不能很好地处理 NULL(并且还要感谢 OP 自己的试验 EMPTY 实例)。

最佳解决方案是将空间数据存储在单独的链接 table 中,其中仅包含每个非空和非空空间实例的记录。

但是, 适用于 OP 的一种解决方法是将所有空值设置为 POINT(0,0) 坐标,但是对于更多的全局应用程序,这可能会产生不正确的结果 - 因此,如果您能够重组数据,则首选方法是最好的。