利用空间索引 - SQL Server

问题描述 投票:0回答:0

我有一个表

Points
,其中
shape
列用于
geography
类型的点,并在该列上设置空间索引以提高性能..

CREATE TABLE  Points(id VARCHAR(10) PRIMARY KEY, shape geography);
CREATE SPATIAL INDEX SIndx_Points_shape ON Points(shape);   

我正在尝试从另一个名为

shape
的表中的
geometry
类型的
Grids
列中检索具有多边形形状的点表中的所有相交点对。 Grids 表还具有空间索引来优化空间查询。

INSERT INTO Intersections(point_id ,grid_id )
SELECT P.id , G.id
FROM Points P
INNER JOIN Grids G
ON [G].[SHAPE].STIntersects(geometry::STGeomFromWKB([P].[shape].STAsBinary(),4326)) = 1

但是,执行计划表明在 Grids 表上进行 Clustered Index 查找,但似乎没有使用 Points 表上的空间索引,这可能会影响查询性能。

我尝试使用查询提示来指定索引,如下所示:

OPTION (TABLE HINT(P, INDEX (SIndx_Points_shape )))

但它会抛出错误

由于此查询中定义的提示,查询处理器无法生成查询计划。重新提交查询,不指定任何提示,也不使用 SET FORCEPLAN。

关于查询优化器为何不在 Points 表上使用空间索引以及如何确保优化器利用索引以获得更好的性能的任何想法。

sql sql-server gis geospatial spatial
© www.soinside.com 2019 - 2024. All rights reserved.