क्या होता है अगर आप TOP (1) WITH TIES
. को हटा देते हैं आंतरिक क्वेरी से, और बाहरी क्वेरी को शीर्ष पर वापस करने के लिए सेट करें k पंक्तियाँ?
मुझे यह जानने में भी दिलचस्पी होगी कि क्या यह संशोधन बिल्कुल मदद करता है। यह TOP
. का उपयोग करने की तुलना में अधिक कुशल होना चाहिए :
DECLARE @start FLOAT = 1000
,@k INT = 20
,@p FLOAT = 2;
WITH NearestPoints AS
(
SELECT *
,T.g.STDistance(@x) AS dist
,ROW_NUMBER() OVER (ORDER BY T.g.STDistance(@x)) AS rn
FROM Numbers
JOIN T WITH(INDEX(spatial_index))
ON T.g.STDistance(@x) < @start*POWER(@p,Numbers.n)
AND (Numbers.n - 1 = 0
OR T.g.STDistance(@x) >= @start*POWER(@p,Numbers.n - 1)
)
)
SELECT *
FROM NearestPoints
WHERE rn <= @k;
NB - परीक्षण नहीं किया गया - मेरे पास यहाँ SQL 2008 तक पहुँच नहीं है।