테이블이 있습니다. 포인트 유형의 지리적 포인트가있는 포인트. 나는 가장 가까운 지점을 얻기 위해이 코드를 실행하고 있습니다 :가장 가까운 지점을 선택하십시오. SQL Server 공간
CREATE SPATIAL INDEX SpatialIndex ON Points (Point);
불행하게도, 쿼리가 매우 느리다 :
DECLARE @Wgs84Longitude FLOAT;
DECLARE @Wgs84Latitude FLOAT;
DECLARE @Point GEOGRAPHY = Geography::STPointFromText(N'POINT('
+ CAST(@Wgs84Longitude AS NVARCHAR(MAX))
+ N' '
+ CAST(@Wgs84Latitude AS NVARCHAR(MAX))
+ N')', 4326);
SELECT
TOP 1
*
FROM Points
ORDER BY @Point.STDistance(Point) ASC;
포인트 테이블이 인덱스를 가지고있다. 더 빠르게 (색인 및/또는 쿼리를 현명하게) 개선 할 수있는 것이 있습니까?
추신 :
나는이 몇 가지 맛으로 연주 :
CREATE SPATIAL INDEX SpatialIndex ON [Core].[InternationalPostcodeList](Point)
USING GEOGRAPHY_GRID
WITH
(
--BOUNDING_BOX =(-8.164229, 49.18581, 8.05384, 60.717093)
GRIDS=(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH)
, CELLS_PER_OBJECT = 64
, PAD_INDEX = OFF
, SORT_IN_TEMPDB = OFF
, DROP_EXISTING = OFF
, ALLOW_ROW_LOCKS = ON
, ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY];
성능은 여전히 받아 들일 수있다.
감사합니다. 기사에서 제안 된대로 WHERE 절을 도입하면 공간 인덱스 사용을 명백히 강화하기 위해 쿼리가 더 느리게 실행됩니다. – cs0815
@csetzkorn 테이블의 크기는 (행 단위로) 무엇이며 현재 귀하가 얻고있는 시간은 무엇입니까? –
약 250 만 개의 행 ... – cs0815