2012-11-12 2 views
1

2000 레코드가있는 'Region'이라는 테이블이 하나 있습니다. 지역 테이블에는 점이라는 1 개의 기하학 컬럼이 있습니다. 이제 1 천만 개의 레코드가있는 'geometry'라는 기하 구조 열이있는 Bus_Route라는 다른 테이블이 있습니다. 이제 저는 그 지역에있는 요점들을 원합니다. 다음 쿼리를 사용하여 내 포인트가 해당 지역에 있는지 여부를 STcontains를 사용하여 확인합니다. 그러나이 쿼리는 오랜 시간이 걸립니다 (약 3 일). 나는 Bus_Route 테이블에 Spatial 인덱스를 만들었습니다.이 테이블에는 1,000 만 개의 레코드가 있지만 그것은 도움이되지 않습니다.STcontains() 쿼리가 공간 인덱스로도 느리게 실행 됨

  Select 
       Region.BlockID, 
       Bus_Route.geometry 
       from 
       Bus_Route,       
       Region 
      where 

       Region.points.STContains(Bus_Route.geometry) = 1 

도와주세요!

답변

1

관찰의 몇 가지 : 당신의 버스가 아마 평지를 통해 실행하지 않기 때문에

  1. 대신 기하학의 지리를 사용합니다.
  2. 당신이 십자가가 같은 일을 에 의해 (진술이하고 같은 쿼리가있는), 그것에 대해 명시 에 가입하기 위하여려고하는 경우 :

    선택 Region.BlockID을 Bus_Route.geometry Bus_Route
    에서 는 십자가는 지역

  3. 가 대신 STContains의 STIntersects를 사용하여 봤어 가입? 문제를 올바르게 해석하고 있다면 주어진 경로가 통과하는 지역을 찾고 있습니다. 즉, 두 지역 인스턴스 간의 교차가 비어 있지 않음을 의미합니다. 작성한 쿼리는 지역 내에 완전히 포함 된 경로를 보여줍니다.

+0

안녕 벤, 감사합니다. 지리 정보를 지형으로 변환했습니다. 문제는 4000 개의 위도/경도로 지역을 만들고, 1 포인트 위도/경도가 해당 지역 (4000 포인트)에 있는지 확인하고 싶습니다. 어떻게 STContains 지형을 사용할 수 있습니까? DECLARE @g geography; DECLARE @h 지리; SET @g = 위도/경도가 4000 포인트이며 DB에 저장 됨 SET @h = geography (확인하고 싶은 위도/경도) 도와주세요! –

+0

영역을 만드는 4000 점이 있다고 말하면 영역의 경계를 정의하는 선분의 ​​끝점을 가리키고 있습니까? 나는 여기서 포인트를 얻지는 않겠지 만 그 자체로 흥미로운 질문입니다 (즉, 그것에 대해 별도의 질문을해야합니다). 내 첫 번째 추측은 점에서 영역의 텍스트 표현을 가져온 다음 정적 지리 메서드를 사용하여이를 다시 지리 인스턴스로 구문 분석해야한다는 것입니다. 그것은 나에게 둥근 것처럼 보인다. 나는 파기를 할거야. –

+0

답장을 보내 주셔서 감사합니다. 나는 더 자세히 설명 할 것이다. 지형으로 위도/경도 (위도/경도의 개요)가 있습니다. 이제 1 포인트 위도/경도가 있고 그 지점이 내 지역에 있는지 확인하고 싶습니다. 나는 어떻게 그럴 래? 그래서 여기서 4000 포인트는 지역의 개요를 만들고 1 포인트는 그 지역에 존재하는지 아닌지를 확인하는 것입니다. 어떻게 확인할 수 있습니까? 당신의 대답에 대한 감사합니다 벤! –

관련 문제