질문 하나 드립니다.
공간인덱스를 이용하여, 데이터를 부분범위 처리하려고 하는데, 공간인덱스를 타고 50개만 가져오려고 하는데
실행계획과 트레이스를 보면, 일단 해당되는건 다 읽어온다음에, 50개만 보여주는 순서로 풀리고 있습니다.
방법이 없을까요?
select top 50 *
from dbo.test
where GM.STDistance(geometry::STPointFromText('POINT (127.027636 37.497886)', 0)) <0.03
order by GM.STDistance(geometry::STPointFromText('POINT (127.027636 37.497886)', 0))
set statistics io on 으로 해서 본 트레이스 결과는
(50 row(s) affected)
테이블 'Worktable'. 검색 수 0, 논리적 읽기 수 0, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'Workfile'. 검색 수 2, 논리적 읽기 수 32, 물리적 읽기 수 0, 미리 읽기 수 32, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'extended_index_277576027_384000'. 검색 수 483, 논리적 읽기 수 2077, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'test'. 검색 수 0, 논리적 읽기 수 150159, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'Worktable'. 검색 수 0, 논리적 읽기 수 0, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
공간 인덱스만 읽는다면 논리적 읽기 수 2077 외에 본 테이블 test를 읽을때는 논리적 읽기가 100안으로 나와야 하는데
읽기수를 보면 150159 라는 어마어마한 수를 가져옵니다.
방법이 없는것일까요?
(실행계획은 아래 이미지를 떠서 첨부하였습니다)