几何交集的基数估计非常差

And*_*ill 7 sql-server sql-server-2012 spatial cardinality-estimates

我正在将一个点与一组多边形相交。查询已编入索引,多边形不重叠,但查询计划似乎认为我将返回 18k 行而不是 1 行,这会导致查询计划错误。

特别是查询计划的最右边节点似乎认为 STPointFromText 函数将返回 1000 的基数,并且该点集与几何索引的交集返回 54k 行的 30%。(在表格中运行了 100 万个点,但没有找到实际返回超过 1 行的反例)

这个缩写查询的结果并不可怕,但是当我将它的输出连接到其他任何东西时,高基数估计迫使上游表成为 tablescan+hashmap,即使整个查询返回 1 行。这个扩展查询每秒运行几次,所以我想知道如何优化它。

空间索引是 HHHH,对于大约 80x50 米的最高分辨率(在域的大约 4000 公里最长边上),索引中有 56k 个多边形,预计最小尺寸约为 100 米。

估计与实际基数 请注意 est 行和实际行之间的差异。

查询计划 估计的查询计划。

Rob*_*ley 7

听起来您想让 rowgoals 在查询中发挥作用 - 所以尝试使用TOP(1),也许通过测试来避免 NULL(在不匹配的 SRID 的情况下)。这样您就可以启动“最近邻”功能。我知道您正在使用“包含”,但您想使用一种方法来告诉 QO 您只会返回单行。

http://blogs.lobsterpot.com.au/2014/08/14/sql-spatial-getting-nearest-calculations-working-properly/可能有一些提示......