SQL Server 2008 R2 Express 데이터베이스에 약 7 천 5 백만 개의 레코드가 있습니다. 각 값은 특정 값에 해당하는 위도입니다. 테이블에는 지리 열이 있습니다. 주어진 위도 경도 (점)에 대해 가장 가까운 이웃을 찾으려고합니다. 공간 인덱스가있는 쿼리가 이미 있습니다. 그러나 데이터베이스의 레코드 위치 (예 : 1 사분기 또는 마지막 분기)에 따라 쿼리는 가장 가까운 이웃을 찾는 데 약 3 ~ 30 초가 소요될 수 있습니다. 쿼리 또는 공간 인덱스를 최적화하여 훨씬 빠른 결과를 제공하도록 최적화 할 수 있다고 생각합니다. 지금은 기본 설정으로 공간 인덱스를 적용했습니다. 내 테이블과 쿼리는 다음과 같습니다.
CREATE TABLE lidar(
[id] [bigint] IDENTITY(1,1) NOT NULL,
[POINTID] [int] NOT NULL,
[GRID_CODE] [numeric](17, 8) NULL,
[geom] [geography] NULL,
CONSTRAINT [PK_lidar_1] PRIMARY KEY CLUSTERED ([id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
내가 사용하는 공간 색인 :
CREATE SPATIAL INDEX [SPATIAL_lidar] ON [dbo].[lidar] ([geom]) 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]
사용중인 쿼리는 다음과 같습니다.
declare @ms_at geography = 'POINT (-95.66 30.04)';
select TOP(1) nearPoints.geom.STAsText()as latlon
from
(
select r.geom
from lidar r With(Index(SPATIAL_lidar))
where r.geom.STIntersects(@ms_at.STBuffer(1000)) = 1
) nearPoints
내 데이터베이스의 위도 long 샘플이 있습니다. 정확성과 밀도에 대한 아이디어를 제공합니다. 7 천만 건의 모든 기록은 한 도시에 대한 것입니다 (Lidar 데이터).
POINT (-95.669434934023087 30.049513838913736)
이제이 쿼리는 위에서 설명한대로 결과를 제공하지만 가능한 한 성능을 향상시키고 싶습니다. 내 추측은 성능을보다 잘 최적화하기 위해 위에있을 수있는 공간 인덱스의 기본값을 조정하여 추측합니다. 이것에 대한 단서가 있습니까?
버퍼를 10에서 1000으로 변경하려고 시도했지만 거의 동일한 결과를 얻었습니다.
성능 향상을위한 다른 제안도 환영합니다.
다음은 현재 사용중인 시스템입니다.
Windows 7 64bit Professional
Intel(R) Core(TM)2 Quad CPU Q9650 @ 3.00GHz (4 CPUs), ~3.0GHz
Ram: 8 GB
NVIDIA GeForce 9500 GT
lidar
태그 추가를 고려하십시오 .