我有一个地理专栏。我已经创建了一个空间索引,但它没有被使用:
declare @geog geography
select @geog = 'POINT (18.12 -33.2)'
select *
from dbo.product WITH(INDEX(IX_Spatial))
where
@geog.STDistance(GeoLocation) > 1000
索引的创建方式如下:
CREATE SPATIAL INDEX [IX_Spatial] ON [dbo].[Product]
(
[GeoLocation]
)USING GEOGRAPHY_GRID
WITH (
GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM),
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
不同级别的网格密度值不是故意设置为中等。如果查看估计的执行计划,则不使用索引。
[http://blogs.msdn.com/b/isaac/archive/2008/08/29/正在使用我的空间索引。aspx][1]
如果我试图向查询优化器添加提示
声明@geog geography
选择@geog='点(18.12-33.2)'
选择*
从dbo.product WITH(INDEX(IX_Spatial))
哪里
@地理距离(地理位置)>1000
我得到这个错误:
查询处理器无法生成
查询的查询计划
空间索引提示。原因:空间
索引不支持比较器
在谓词中提供
我的数据库以SQL Server 2008(100)兼容级别运行。
.