使用 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
这里Boundary和GeographyValue都是地理数据类型。
如果我删除 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
我想使用 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
这里Boundary和GeographyValue都是地理数据类型。
如果我删除 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