내 trival 쿼리는 SQL 프로파일 러에 따라 반환하는 데 3 초가 걸리고 많은 양의 읽기가 필요합니다. 왜?SQL Server의 내 공간 인덱스는 여전히 매우 간단한 쿼리에서도 많은 읽기를 필요로합니다. 왜?
모든 지오 코딩 된 지점 인 5,000,000 개의 계정으로 채워진 표가 있습니다. 모든 계좌는 도시의 반경 20 마일 내에 위치하고 있습니다. 내 색인은 그렇게 보입니다.
CREATE SPATIAL INDEX [IX_CI_Geocode] ON [dbo].[CustomerInformation]
(
[Geocode]
)USING GEOGRAPHY_GRID
WITH (
GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = LOW),
CELLS_PER_OBJECT = 128, PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
나는 다음과 같은 간단한 쿼리를 실행 :
DECLARE @g geography = geography::Point(41.848039, -87.96361, 4326);
DECLARE @region geography = @g.STBuffer(5000);
select count(0) from CustomerInformation ci WITH(INDEX(IX_CI_Geocode))
where ci.Geocode.STIntersects(@region) = 1
그것은 반환 3 초를 소요하고 SQL Server 프로파일에 따라이 12,203의 CPU를 요구하고 1,218,873의 읽습니다. 그것들은 색인을 사용하는 데 엄청난 숫자처럼 보입니다.
왜 이렇게 느린가요? 왜 이렇게 하드 드라이브에서 읽어야합니까? 이 성능을 향상 시키려면 어떻게해야합니까?
쿼리 계획을 보면 아래 스크린 샷의 필터 연산자는 쿼리 비용의 34 %입니다.
공간 인덱스에 대한 경험이 없지만 나에게 뛰어 들었던 부분은 추정 행 수와 실제 행 수입니다. 일반적으로 이는 오래된 통계의 표시입니다. 테이블과 인덱스에서 통계를 업데이트 해 보셨습니까? – JNK
좋은 생각 이었지만 전혀 도움이되지 않았습니다. 나는 또 다른 접근법을 사용하여 끝났다. –