我有一个(我认为)很简单的SQL Server空间查询:
获取所有存在于某个四边形内的美国州(即网页Google/Bing地图的视口/边界框)
我需要提供关于返回的“地理”数据的更多信息吗?例如,点的数量等等?还是我需要运行“分析器”并从那里提供一些统计数据?
或者我的Cells_per_object / Grids设置不正确(说实话,我真的不知道应该将这些值设置为什么)。
更新
在下面的第一条回复中,@Bobs确认空间索引未被使用,因为主键(聚集索引)比表中50个奇数行的非聚集索引更快,所以我尝试强制使用空间索引。
现在查询立即运行。所以我的新问题是,为什么这样修复了呢?
获取所有存在于某个四边形内的美国州(即网页Google/Bing地图的视口/边界框)
SELECT CAST(2 AS TINYINT) AS LocationType, a.Name AS FullName,
StateId, a.Name, Boundary.STAsText() AS Boundary,
CentrePoint.STAsText() AS CentrePoint
FROM [dbo].[States] a
WHERE @BoundingBox.STIntersects(a.Boundary) = 1
运行需要6秒,太慢了。
我该如何调试这个问题,或者我需要对其进行哪些微调?我是否有任何空间索引?我相信是的。
/****** Object: Index [SPATIAL_States_Boundary]
Script Date: 07/28/2010 18:03:17 ******/
CREATE SPATIAL INDEX [SPATIAL_States_Boundary] ON [dbo].[States]
(
[Boundary]
)USING GEOGRAPHY_GRID
WITH (
GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH),
CELLS_PER_OBJECT = 1024, PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF,
DROP_EXISTING = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
我需要提供关于返回的“地理”数据的更多信息吗?例如,点的数量等等?还是我需要运行“分析器”并从那里提供一些统计数据?
或者我的Cells_per_object / Grids设置不正确(说实话,我真的不知道应该将这些值设置为什么)。
更新
在下面的第一条回复中,@Bobs确认空间索引未被使用,因为主键(聚集索引)比表中50个奇数行的非聚集索引更快,所以我尝试强制使用空间索引。
SELECT CAST(2 AS TINYINT) AS LocationType, a.Name AS FullName,
StateId, a.Name, Boundary.STAsText() AS Boundary,
CentrePoint.STAsText() AS CentrePoint
FROM [dbo].[States] a WITH (INDEX(SPATIAL_States_Boundary))
WHERE @BoundingBox.STIntersects(a.Boundary) = 1
现在查询立即运行。所以我的新问题是,为什么这样修复了呢?