Z zde :
Aby mohl dotaz Nearest Neighbor používat prostorový index, musí být splněny následující požadavky:
- Prostorový index musí být přítomen na jednom z prostorových sloupců a metoda STDistance() musí tento sloupec používat v klauzulích WHERE a ORDERBY.
- Klauzule TOP nemůže obsahovat výraz PERCENT.
- Klauzule WHERE musí obsahovat metodu STDistance().
- Pokud je v klauzuli WHERE více predikátů, musí být predikát obsahující metodu STDistance() spojen s ostatními predikáty spojením AND. Metoda STDistance() nemůže být ve volitelné části klauzule WHERE.
- První výraz v klauzuli ORDER BY musí používat metodu STDistance().
- Pořadí řazení pro první výraz STDistance() v klauzuli ORDER BY musí být ASC.
- Všechny řádky, pro které STDistance vrací hodnotu NULL, musí být odfiltrovány.
Takže by to mělo fungovat:
DECLARE @g geography;
declare @point nvarchar(50) =''
declare @i int =0,
@lat decimal(8,6) =0.0,
@long decimal(8,6) =0.0,
@start datetime = getdate()
set @lat =(select (0.9 -Rand()*1.8)*100)
set @long =(select (0.9 -Rand()*1.8)*100)
set @point = (select 'POINT('+CONVERT(varchar(10), @lat)+ ' '
+CONVERT(varchar(10), @long)+')')
SET @g = geography::STGeomFromText(@point, 4326);
SELECT TOP 1000
@lat,
@long,
@g.STDistance(st.[coord]) AS [DistanceFromPoint (in meters)]
, st.[coord]
, st.id
FROM Temp st with(index([SpatialIndex_1]))
WHERE @g.STDistance(st.[coord]) IS NOT NULL
ORDER BY @g.STDistance(st.[coord]) asc
Můžete zkontrolovat, že používá prostorový index, dokonce i WITH INDEX
nápověda je odstraněna.