다음을 통해 공유


최근접 이웃에 대한 공간 데이터 쿼리 수행

공간 데이터와 함께 사용되는 일반적인 쿼리는 가장 가까운 인접 쿼리입니다. 가장 가까운 인접 쿼리는 특정 공간 개체에 가장 가까운 공간 개체를 찾는 데 사용됩니다. 예를 들어, 웹 사이트의 매장 찾기 기능은 고객 위치와 가장 가까운 매장 위치를 찾아야 하는 경우가 많습니다.

가장 인접한 쿼리는 다양한 유효한 쿼리 형식으로 작성할 수 있지만 가장 인접한 쿼리에서 공간 인덱스를 사용하려면 다음 구문을 사용해야 합니다.

문법

SELECT TOP ( number )  
        [ WITH TIES ]  
        [ * | expression ]   
        [, ...]  
    FROM spatial_table_reference, ...   
        [ WITH   
            (   
                [ INDEX ( index_ref ) ]   
                [ , SPATIAL_WINDOW_MAX_CELLS = <value>]   
                [ ,... ]   
            )   
        ]  
    WHERE   
        column_ref.STDistance ( @spatial_ object )   
            {   
                [ IS NOT NULL ] | [ < const ] | [ > const ]   
                | [ <= const ] | [ >= const ] | [ <> const ] ]   
            }  
            [ AND { other_predicate } ]   
    }  
    ORDER BY column_ref.STDistance ( @spatial_ object ) [ ,...n ]  
[ ; ]  
  

가장 가까운 인접 쿼리 및 공간 인덱스

SQL Server에서 TOPORDER BY 절은 공간 데이터 열에서 최근접 이웃 검색을 수행하는 데 사용됩니다. 절에는 ORDER BY 공간 열 데이터 형식에 STDistance() 대한 메서드 호출이 포함됩니다. 이 절은 TOP 쿼리에 대해 반환할 개체의 수를 나타냅니다.

가장 가까운 이웃 쿼리에서 공간 인덱스를 사용하려면 다음 요구 사항을 충족해야 합니다.

  1. 공간 인덱스는 공간 열 중 하나에 있어야 하며 메서드는 STDistance()WHERE 절에서 ORDER BY 해당 열을 사용해야 합니다.

  2. TOP 절은 PERCENT 문을 포함할 수 없습니다.

  3. 절에는 WHERE 메서드가 STDistance() 포함되어야 합니다.

  4. 절에 여러 술어가 있는 경우, WHERE 메서드가 포함된 술어는 다른 술어와 STDistance() 접속사로 연결되어야 합니다. STDistance() 메서드는 WHERE 절의 선택적 부분에 있을 수 없습니다.

  5. ORDER BY 절의 첫 번째 식은 STDistance() 메서드를 사용해야 합니다.

  6. STDistance() 절의 첫 번째 ORDER BY 식에 대한 정렬 순서는 ASC여야 합니다.

  7. STDistanceNULL을 반환하는 모든 행은 필터링되어야 합니다.

경고

SRID가 형식에 대해 서로 같지 않으면, geography 또는 geometry 데이터 유형을 인수로 받는 메서드는 NULL를 반환합니다.

인접 검색에 사용되는 인덱스에 새 공간 인덱스 테셀레이션을 사용하는 것이 좋습니다. 공간 인덱스 공간 분할에 대한 자세한 내용은 공간 데이터(SQL Server)를 참조하세요.

예시

다음 코드 예제에서는 공간 인덱스를 사용할 수 있는 가장 인접한 쿼리를 보여 있습니다. 이 예제에서는 데이터베이스의 Person.Address 테이블을 AdventureWorks2012 사용합니다.

USE AdventureWorks2012  
GO  
DECLARE @g geography = 'POINT(-121.626 47.8315)';  
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address  
WHERE SpatialLocation.STDistance(@g) IS NOT NULL  
ORDER BY SpatialLocation.STDistance(@g);  
  

SpatialLocation 열에 공간 인덱스를 만들어 가장 인접한 쿼리에서 공간 인덱스를 사용하는 방법을 확인합니다. 공간 인덱스를 만드는 방법은 Create, Modify, and Drop Spatial Indexes를 참조하십시오.

예시

다음 코드 예제에서는 공간 인덱스를 사용할 수 없는 가장 인접한 쿼리를 보여 있습니다.

USE AdventureWorks2012  
GO  
DECLARE @g geography = 'POINT(-121.626 47.8315)';  
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address  
ORDER BY SpatialLocation.STDistance(@g);  
  

쿼리에 WHERE 구문 섹션에 지정된 양식에서 사용하는 STDistance() 절이 없으므로 쿼리에서 공간 인덱스를 사용할 수 없습니다.

또한 참조하십시오

공간 데이터 (SQL Server)