2009-08-28 2 views
7

현재 위도/긴 부동 소수점 열이있는 표가있는 사이트가 있고 그 2 개 열에 대한 색인과 검색해야하는 또 다른 색인이 있습니다.SQL Server 2008에서 "Covering, Spatial"인덱스를 만들 수 있습니까?

나는이 테이블을 계속 쿼리하여 특정 포인트에서 반경 내에있는 행을 얻는다. (실제로 속도를 얻으려면 사각형을 얻는다.) 그러나 인덱스가 이미 필요한 필드 만 필요하므로이 인덱스가 필요하다. 사실 취재에, 그리고 실행 계획은 2 단계가 있습니다 내가 SQL 나는 지리 열을 만든 2008 년의 공간 기능을 활용하기 위해 노력하고있어 지금

Index Seek (cost: 100%) and SELECT (cost: 0%) 

을 만들어, 그것을 작성 공간 색인, 작품.

실행 계획에 100 만 단계가 있고 74 %의 시간이 공간 인덱스에서 찾은 행을 실제 테이블에 조인하는 클러스터 된 인덱스 탐색에 사용된다는 점을 제외하고는 모두 잘 작동합니다. 나머지 데이터를 얻으려면 ...
(Spatial Index Seek은 실행 계획 비용의 1 %가 소요됩니다.)

그래서 분명히 Spatial 인덱스를 적절히 사용하고 있으며 필자가 필요로하는 것보다 Lat/Long에 대한 "일반"색인을 사용하기 전에 주 테이블에 가입하면 Spatial 쿼리가 내 이전 쿼리보다 7 배 오래 걸립니다.

이전에했던 것처럼 공간 인덱스를 추가하여 한 단계로 처리 할 수있는 방법이 있습니까?
이 상황을 개선하기 위해 할 수있는 다른 일이 있습니까?


업데이트 : 나는 따르면
(단지 인덱스 자체에 열을 포함 내가, 내가 사용에 대해 알고하지 않았다) "일반"인덱스는이 키워드를 포함하여 다른 열을 "포함"수 있다는 것을 발견 문서 here에 해당 절은 공간 인덱스에 대한 옵션이 아닙니다 ... 아이디어가 있습니까?

감사합니다.
다니엘

답변

4

아니요, 현재 불행히도 커버 링 공간 인덱스를 만들 수있는 방법이 없습니다. 행의 지리 값을 가져 오기 위해 검색어가 항상 기본 표에 북마크 조회를 수행합니다.

STIntersects의 경우 실제로 매개 변수 개체와 교차하는지 확인하기 위해 실제 지리 개체에 대한 보조 필터를 수행해야하므로 STIntersect는 항상 필수입니다. 그러나 정답을 요구하지 않고 Filter()를 사용할 수 있으면 기본 테이블을 전혀 조회하지 않고 인덱스의 기본 키 열을 제공 할 수 있습니다. 이를 지원하는 것은 다음 릴리스에서 고려해야 할 사항입니다.

현재 쿼리 속도를 향상 시키려면 Filter()를 사용하고 sp_help_geography_index의 출력으로 인덱스를 조정 해 보았습니까?