Вместо того, чтобы выполнять вычисления для всех записей, вы можете использовать простое вычисление Пифагора для ваших чисел широты / долготы и выбрать верхние 20. Затем вы можете выбрать фактические первые 10, используя свою более точную функцию. Хотя начинать с этого неточно, оно должно быть достаточно точным, чтобы уменьшить ваш набор данных.
РЕДАКТИРОВАТЬ: Примерно так
declare @Lat real
declare @lon real
Set @lat = 41.05
Set @lon = -73.53
SELECT top 10
MemberID,
Address1,
City,
State,
Zip,
Phone,
Lat,
Lon,
(SELECT fun_DistanceLatLon] (@Lat,@lon,Lat,Lon)) as mDistance --Calculate distance
FROM
Dealers
WHERE
MemberId IN
(
SELECT TOP 20
MemberID
FROM
Dealers
ORDER BY
SQRT(SQUARE(@Lat - Lat) + SQUARE(@Lon - Lon))
)
Order by
(SELECT fun_DistanceLatLon] (@Lat,@lon,Lat,Lon))
Тем не менее, я предлагаю вам попробовать и с вашим набором данных, и профилировать его, чтобы увидеть, какова может быть реальная разница в производительности.