2

ポイントを含む1つの地理タイプフィールドを持つ2 000 000行以内のデータテーブルを持つデータベースがあります。別のデータテーブルには、ポリゴンを含む 1 つの地理タイプ フィールドを持つ 600 行があります。

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 でインデックス化されていない場合は、その行にフィルター処理する前に geographies で結合しようとしていることに気付く場合があります。

于 2012-06-07T12:22:33.773 に答える