使用 STContains 比较地理列会减慢 SQL 服务器中的查询速度

Comparing geography column using STContains slow down the query in SQL Server

我想使用 StContains 函数比较两个地理列,但它会减慢查询速度,并在 30-40 秒后获得输出,这是一个巨大的性能问题。

我正在使用以下查询:

SELECT  DISTINCT
            T.[LocationID], G.[Boundary].STContains(ESP.GeographyValue)
    FROM    [#TempTable] T
    CROSS JOIN [dbo].[GeographyTable] G
    INNER JOIN [dbo].LocationTable ESP ON T.LocationID = ESP.LocationID
    WHERE   G.[ID] = 1

这里BoundaryGeographyValue都是地理数据类型。

如果我删除 G.[Boundary].STContains(ESP.GeographyValue) 则查询将在 0 秒内执行,因此主要性能问题是由于 StContains。

结果集包含 7000 条记录,这可能不是问题所在。

更新:

我已将空间索引添加到两列,但执行速度仍然很慢。通过 运行 一个简单的查询需要 10 secs.I 用于下面的查询:

select ES.* from LocationTable ES INNER JOIN GeographyTable G ON ES.GeographyValue.STEquals(G.Boundary) = 1 Where G.Id = 1

我也试过 STContains 但还是不行。

使用以下代码强制您的代码使用空间索引 [dbo].[GeographyTable] G WITH (INDEX(SI_Geofence_Boundary))

您修改后的查询将如下所示,

SELECT  DISTINCT
            T.[LocationID], G.[Boundary].STContains(ESP.GeographyValue)
    FROM    [#TempTable] T
    CROSS JOIN [dbo].[GeographyTable] G WITH (INDEX(SI_Geofence_Boundary))
    INNER JOIN [dbo].LocationTable ESP ON T.LocationID = ESP.LocationID
    WHERE   G.[ID] = 1

它将执行时间从 30-40 秒减少到 2-3 秒。

有关详细信息,请查看 link