2013-02-21 2 views
1

NULL 또는 NULL이 아닌 지리적 좌표 열이있는 SQL Server 데이터베이스에 많은 수의 사진 (~ 10 백만)이 있습니다 (배치 또는 배치되지 않음).공간 인덱스에 NULL 사용

또한이 지리 정보에 공간 인덱스를 만들었습니다.

이제 특정 다각형 안에있는 모든 사진을 선택하려고합니다.

지도에없는 사진을 저장하는 두 가지 방법이 있습니다 :

  • 내가지도에없는 모든 사진의 위치를 ​​지리적 할 NULL 지정하면, 너무 느린 같은 쿼리의 성능 (AS 공간 인덱스가 NULL 열과 함께 작동하지 않습니다.)

  • 지도에없는 모든 사진의 위치 정보에 POINT(0 0)을 할당하면이 영점이인 경우를 제외하고는 성능이 좋습니다. 또한 이러한 요청은 잘못된 사진을 반환합니다 (지도에 존재하지 않음).

어떻게 이러한 문제를 극복 할 수 있습니까?

NULL 또는 NOT NULL 비트가 포함 된 열을 추가하고 두 열 (이 열 및 지리 정보)에서 색인을 만들어야합니까?

UPDATE 나는 두 개의 열에서 인덱스를 만들려고하지만, 공간 인덱스는 지리적 정보 (MSDN)와 하나의 컬럼 만 포함되어 있기 때문에 그것은 불가능하다.

답변

0

나는 내 문제의 두 가지 해결책이 있습니다 알고있는 것처럼 :

  • POINT(0 0) 멀리 북쪽 지점 POINT(0 90) 제로 점의 이동은. 이 솔루션은 이상적이지는 않지만 작동하며 SQL Server 버전을 변경할 필요가 없습니다.
  • 이 스크립트의 실행에 의해 (고정 NULL이 버전의 버그에서) 110 SQL Server 버전 변경 : ALTER 데이타베이스 데이터베이스 _ SET의 COMPATIBILITY_LEVEL = 110
1

어떤 SQL Server 버전을 사용하고 있습니까? 2008 년과 2008 년에 널 (NULL) 공간 열이 알고 문제 R2 이 같은 주제에 대한 내 질문에 제발 봐있다 : SQL Server 2008 Performance on nullable geography column with spatial index

내가 공간 데이터 유형을 저장하기 위해 별도의 테이블을함으로써이 문제를 해결은. 내 프로젝트에서 난 ID 열, 위도 및 경도 열 주소 테이블을 hava 그런 다음 ID 및 주소 지오 메트릭 열에 대한 외래 키 제약 조건이있는 AddressCoordinate 테이블이 있습니다. 마지막으로 필자는 누락 된 유효한 AddressCoordinates를 간단히 채울 수있는 스크립트를 가지고 있습니다.

+0

별표 이유로 인해 중복의 좋은 해결책이 아니다. –

+1

이상적인 솔루션이 아니라는 점에 동의합니다. 위로 : 1 : 나중에 필터링해야하는 더미 데이터가 삽입되지 않았습니다. 2 : 크기 및 성능 : 더미 데이터는 인덱스 크기를 크게 늘리므로 실행 시간에 영향을 줄 수 있습니다. 3 : 공간 데이터 형식 만 해당 테이블에 저장되어 있으므로 PK의 유일한 복제본이었습니다. 이 트레이드 오프로 인해 내 가치가 있었지만, 귀하의 사례에 대한 다른 결론에 도달했음을 이해합니다. – Tomas