Dari di sini :
Persyaratan berikut harus dipenuhi agar kueri Tetangga Terdekat dapat menggunakan indeks spasial:
- Indeks spasial harus ada pada salah satu kolom spasial dan metode STDistance() harus menggunakan kolom tersebut dalam klausa WHERE dan ORDERBY.
- Klausa TOP tidak boleh berisi pernyataan PERCENT.
- Klausa WHERE harus berisi metode STDistance().
- Jika ada beberapa predikat dalam klausa WHERE maka predikat yang mengandung metode STDistance() harus dihubungkan dengan konjungsi AND ke predikat lainnya. Metode STDistance() tidak boleh berada di bagian opsional dari klausa WHERE.
- Ekspresi pertama dalam klausa ORDER BY harus menggunakan metodeSTDistance().
- Urutan urutan untuk ekspresi STDistance() pertama di ORDER BYclause harus ASC.
- Semua baris yang mengembalikan NULL STDistance harus difilter.
Jadi, ini seharusnya berhasil:
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
Anda dapat memeriksa apakah itu menggunakan indeks spasial bahkan WITH INDEX
petunjuk dihapus.