2

我有一个数据库,其中包含 2 000 000 行内的数据表,其中 1 个地理类型字段包含点。在另一个数据表中,我有 600 行,其中 1 个地理类型字段包含多边形。

This query to retrieve all the POINT in a POLYGON is very slow

SELECT ID_POINT, ID_POLYGON FROM 
             (SELECT ID_POINT, COORD FROM POINT_TABLE) as POINT
             (SELECT ID_POLYGON, COORD FROM POLYGON_TABLE WHERE ID_POLYGON = 276) as POLYGON
         WHERE
             (POINT.Coord.STIntersects(POLYGON.COORD) = 1)

我在每个表中有 1 个空间索引,如下所示:

CREATE SPATIAL INDEX [IDX_POLYGON_COORD] ON [dbo].[POLYGON] 
(
    [COORD]
)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) ON [PRIMARY]
GO

你能帮我加快这个查询吗?

问候

4

1 回答 1

1

这主要取决于您的数据的分布程度,以及您在 Point 表上的索引(我假设存在这样的索引)的大小是否与其中等网格大小相匹配。

理想情况下,您的执行计划应该显示在 Polygon 上搜索以获取第 276 行,然后在 Point 上显示空间索引搜索以获取与多边形相交的那些。它不应该很慢。但是,如果您的 Polygon 表也没有在 id_polygon 上建立索引,那么您可能会发现它在过滤到该行之前尝试加入地理。

于 2012-06-07T12:22:33.773 回答