当我减少半径时,为什么空间查询在SQL Azure中对空间索引花费的时间更长?

时间:2011-11-18 18:04:20

标签: sql azure geospatial azure-sql-database spatial

我最近开始看到这种奇怪的行为,即当我减少我的半径时,进行空间搜索会导致降级的体验。昨晚我放弃并重建了我的空间索引,但结果却是一样奇怪。

任何帮助都将不胜感激。

背景:

Table size = ~360K rows
Table = {ID, Location (geography)}

E.g。使用Radius = 20000执行查询需要1秒,但是在3分钟后仍然执行Radius = 1000的减少。

查询:

DECLARE @x geography
SET @x = geography::Point(47.5302778, -122.0313889, 4326)

SELECT TOP (25) L.RID, L.Location.STDistance(@x) AS DIST 
FROM Location L
WHERE L.Location.STDistance(@x) <= @Radius

索引:

右键单击索引给出了以下内容(我发现SQL Azure中不支持PAD-iNDEX等,但只是逐字复制SQL Management Studio给我的内容)

CREATE SPATIAL INDEX [SPATIAL_Search_Location] ON [dbo].[Search] 
(
 [Location]
)USING  GEOGRAPHY_GRID 
WITH (
GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM), 
CELLS_PER_OBJECT = 16, PAD_INDEX  = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) 

1 个答案:

答案 0 :(得分:1)

与指数的效率有关吗?

我最近在MS SQL 2008中发现了sp_help_spatial_geography_index内置功能,它改变了我创建空间索引的方式。

您可能会发现,当使用较小的搜索区域时,更好的索引可能是Med,Med,High,High。或者是它的变体。

另外,我之前说过它,它值得再说一遍....使用索引提示!

SELECT TOP (25) L.RID, L.Location.STDistance(@x) AS DIST  
FROM Location L WITH(INDEX([SPATIAL_INDEX_NAME]))
WHERE 
L.Location.STDistance(@x) <= @Radius