相关疑难解决方法(0)

一些 SQL Server 地理空间查询比其他查询花费的时间要长得多

我们有一个简单的 SQL Server 表,其中包含如下所示的地理空间数据:

CREATE TABLE [dbo].[Factors](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [StateCode] [nvarchar](2) NOT NULL,
    [GeoLocation] [geography] NULL,
    [Factor] [decimal](18, 6) NOT NULL,
 CONSTRAINT [PK_dbo.Factors] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)
Run Code Online (Sandbox Code Playgroud)

我们现在有大约 100k+ 行,但预计会增长到数百万。

我们对其运行查询,如下所示:

declare @state nvarchar(2) = 'AL'
declare @point geography = geography::STGeomFromText('POINT(-86.19146040 32.38225770)', 4326)

select top 3 
    Lat,
    Lon,
    Factor, 
    GeoLocation.STDistance(@point) as Distance
from dbo.Factors
where StateCode = @state and GeoLocation.STDistance(@point) is not null
order by Distance
Run Code Online (Sandbox Code Playgroud)

不过,这有点奇怪。该表中的数据是参差不齐的:例如,我们得到了一个州南部的数据,但没有得到整个州的数据。如果我们搜索的点在我们获得数据的点的几百米内(例如,来自该州的南部),则查询返回亚秒级。但是,如果距离最近的数据点 100 公里(例如,如果目标点来自该州的北部),则查询最多需要 3 分钟左右才能返回。在这两种情况下,查询计划都表明它们是从地理空间索引的扫描开始的,所以这不是有时会发生的问题,SQL Server 无法确定它应该使用有问题的索引。

我的假设是它与地理空间索引的布局方式有关。 …

sql-server spatial

7
推荐指数
1
解决办法
3076
查看次数

标签 统计

spatial ×1

sql-server ×1