가장 가까운 인접 항목에 대한 공간 데이터 쿼리
적용 대상: Microsoft Fabric의 Microsoft Fabric SQL 데이터베이스에 있는 Microsoft Fabric Warehouse의 SQL Server Azure SQL Database Azure SQL Managed Instance SQL 분석 엔드포인트
공간 데이터와 함께 사용되는 일반적인 쿼리는 가장 가까운 인접 쿼리입니다. 가장 가까운 인접 쿼리는 특정 공간 개체에 가장 가까운 공간 개체를 찾는 데 사용됩니다. 예를 들어 웹 사이트의 저장소 로케이터는 고객 위치에 가장 가까운 저장소 위치를 찾아야 하는 경우가 많습니다.
가장 가까운 인접 쿼리는 다양한 유효한 쿼리 형식으로 작성할 수 있지만 가장 가까운 인접 쿼리에서 공간 인덱스를 사용하려면 다음 구문을 사용해야 합니다.
구문
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 TOP
에서 ORDER BY
절은 공간 데이터 열에서 가장 가까운 인접 쿼리를 수행하는 데 사용됩니다. 절에는 ORDER BY
공간 열 데이터 형식에 STDistance()
대한 메서드 호출이 포함됩니다. 이 절은 TOP
쿼리에 대해 반환할 개체의 수를 나타냅니다.
공간 인덱스를 사용하려면 가장 가까운 인접 쿼리에 대해 다음 요구 사항을 충족해야 합니다.
공간 인덱스는 공간 열 중 하나에 있어야 하며 메서드는
STDistance()
및ORDER BY
절에서WHERE
해당 열을 사용해야 합니다.TOP
절은PERCENT
문을 포함할 수 없습니다.절에는
WHERE
메서드가STDistance()
포함되어야 합니다.절에 여러 조건자가 있는
WHERE
경우 조건자가 포함된 메서드를STDistance()
다른 조건자와 함께 연결AND
해야 합니다.STDistance()
메서드는WHERE
절의 선택적 부분에 있을 수 없습니다.ORDER BY
절의 첫 번째 식은STDistance()
메서드를 사용해야 합니다.절의 첫 번째
STDistance()
식에 대한 정렬 순서는ORDER BY
.이어야ASC
합니다.반환
NULL
되는 모든 행을STDistance
필터링해야 합니다.
Warning
SRID가 형식에 대해 동일하지 않은 경우 지리 또는 기하 도형 데이터 형식을 인수로 사용하는 메서드가 반환 NULL
됩니다.
가장 가까운 인접 쿼리에서 사용되는 인덱스에 새 공간 인덱스 공간 분할을 사용하는 것이 좋습니다. 공간 인덱스 공간 분할에 대한 자세한 내용은 공간 데이터를 참조 하세요.
예 1
다음 코드 예제에서는 공간 인덱스를 사용할 수 있는 가장 가까운 인접 쿼리를 보여줍니다. 다음 예에서는 AdventureWorks2022
예제 데이터베이스의 Person.Address
테이블을 사용합니다.
USE AdventureWorks2022
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를 참조하십시오.
예제 2
다음 코드 예제에서는 공간 인덱스를 사용할 수 없는 가장 가까운 인접 쿼리를 보여줍니다.
USE AdventureWorks2022
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()
절이 없으므로 쿼리에서 공간 인덱스를 사용할 수 없습니다.