यहां से :
स्थानिक सूचकांक का उपयोग करने के लिए निकटतम पड़ोसी क्वेरी के लिए निम्नलिखित आवश्यकताओं को पूरा किया जाना चाहिए:
- स्थानिक स्तंभों में से एक पर एक स्थानिक सूचकांक मौजूद होना चाहिए और STDistance() विधि को उस कॉलम का उपयोग WHERE और ORDERBY खंडों में करना चाहिए।
- टॉप क्लॉज में PERCENT स्टेटमेंट नहीं हो सकता।
- WHERE क्लॉज में STDistance() मेथड जरूर होनी चाहिए।
- अगर WHERE क्लॉज में कई विधेय हैं तो STDistance() मेथड वाले प्रेडिकेट को AND संयोजन द्वारा अन्य विधेय से जोड़ा जाना चाहिए। STDistance() विधि WHERE क्लॉज के वैकल्पिक भाग में नहीं हो सकती।
- ORDER BY क्लॉज के पहले एक्सप्रेशन में theSTDistance() मेथड का इस्तेमाल होना चाहिए।
- ऑर्डर बायक्लॉज में पहले एसटीडीस्टेंस () एक्सप्रेशन के लिए सॉर्ट ऑर्डर एएससी होना चाहिए।
- उन सभी पंक्तियों के लिए जिनके लिए STDistance NULL लौटाता है, उन्हें फ़िल्टर कर दिया जाना चाहिए।
तो, यह काम करना चाहिए:
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
आप जांच सकते हैं कि यह WITH INDEX
. भी स्पेसियल इंडेक्स का उपयोग कर रहा है संकेत हटा दिया गया है।