2012-06-07 5 views
2

У меня есть база данных с данными в пределах 2 000 000 строк с 1 полем типа географии, содержащим точку. В другом datatable у меня есть 600 строк с 1 полем типа географии, содержащим Polygon.Sql Server 2008 Пространственный запрос медленный

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 

Не могли бы вы мне помочь ускорить этот запрос?

С уважением

ответ

1

Это будет главным образом зависеть, как разложить ваши данные, чтобы (я предполагаю, что такой индекс существует) ли индекс у вас на столе будет точка соответствующего размера с его средних размеров сетки.

В идеале ваш план выполнения должен показывать поиск по многоугольнику для извлечения строки 276, а затем пространственный указатель Ищите точку, чтобы получить те, которые пересекаются с полигоном. Это не должно быть медленным. Но если ваша таблица Polygon также не проиндексирована на id_polygon, вы можете обнаружить, что она пытается присоединиться к географическим регионам, прежде чем фильтровать эту строку.

Смежные вопросы