空間データを使用する非常に単純なテーブル構造があります。
CREATE TABLE Test
(
[ID] int not null,
[GeoLocation] geometry not null,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED
(
[ID] ASC
)) on [PRIMARY]
これは、空間インデックスの DDL です。
CREATE SPATIAL INDEX [IX_GeoLocation_Geo] ON dbo.[Test]
(
GeoLocation
)USING GEOMETRY_GRID
WITH (BOUNDING_BOX =(-180, -90, 180, 90), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM), CELLS_PER_OBJECT = 1024, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
列に主キーがあり、[ID]
列に空間インデックスがありGeoLocation
ます。空間インデックスには、テッセレーション スキーマ " Geometry auto grid " を使用しています。
データベースに数千行しかない場合でも、最近隣を取得するクエリはかなり遅いです。
SELECT top 15 T.ID
FROM dbo.TestT --with(index(IX_SpatialData_Geo))
WHERE T.Geo.Filter(@region) = 1
実際、(空間インデックスの使用を強制する) テーブル ヒントを追加することにより、パフォーマンスが向上する代わりに、クエリのパフォーマンスが低下します :)
ありがとう