0

我刚刚将我的 SQL Server 2008 数据库从使用纬度/经度对转换为使用新的地理类型。我使用 STDistance 函数对位于 geography::Point 30 英里范围内的企业运行查询,如下所示:

WHERE this_.GeoLocation.STDistance(geography::Point(42.738963, -84.5522, 4326)) <= 48280.32

这是我在地理列上的索引:

CREATE SPATIAL INDEX IDX_Business_GeoLocation
  ON Business (GeoLocation)
  USING GEOGRAPHY_GRID
  WITH (
    GRIDS = (
      LEVEL_1 = LOW, 
      LEVEL_2 = LOW, 
      LEVEL_3 = LOW, 
      LEVEL_4 = LOW),
    CELLS_PER_OBJECT = 64
  )

我真的不明白网格级别或每个对象的单元格是什么意思,但我正在寻找的是我的场景的最佳设置,我正在搜索距离点 30 英里以内的企业(纬度/长)。

有小费吗?

4

1 回答 1

2

这是一个鲜为人知的秘密(或者至少在我发现它之前对我来说是这样!)

EXEC sp_help_spatial_geography_index
@tabname = '[TABLE_NAME]',
@indexname = '[SPATIAL_INDEX_NAME]',
@verboseoutput = 1,
@query_sample = 'POLYGON((xy,xy,xy,xy))'

填写明显的位,并@verboseoutput保持1。它让您了解初级和内部过滤器的效率(当然越高越好)。如需快速了解空间索引,包括哪些网格和单元格等同于在此处尝试。

另外,我发现这个视频很有趣。

于 2012-07-05T15:30:36.577 回答