T-SQL在第一条记录匹配内联查询计算条件后停止

我需要检查商家是否接近我的长经度值。我不需要所有附近的东西,我只需要知道至少1点是否在附近。

使用以下查询:

SELECT *
FROM
(
    SELECT  TOP 1
        Id,ImagePath,Title,Latitude,Longitude,'Distance' = dbo.GetHaversineDistance(77.050888,28.581181,Latitude),[Address],City,PinCode,[State],Phone,DateCreated,DateLastUpdated,IsDeleted,MerchantCode
    FROM MerchantLocations 
    ORDER BY Distance

) AS Locations
WHERE Distance <= 50

尽管排在前1位,但我知道对表中的所有记录都进行了Haversine计算,然后按距离对它们进行了排序,然后选择了前1位。

一旦至少1条记录少于50条,是否可以停止表扫描和haversine计算?有没有办法不对所有记录进行haversine计算?

jinwenyu2002 回答:T-SQL在第一条记录匹配内联查询计算条件后停止

我希望此公式返回距离小于50的遇到的“第一”行:

SELECT TOP 1 ml.*,v.distance
FROM MerchantLocations ml CROSS APPLY
     (VALUES (dbo.GetHaversineDistance(77.050888,28.581181,Longitude,Latitude))
     ) v(distance)
WHERE distance <= 50;

使用ORDER BY将要求评估所有行,因此需要计算所有行的距离。

如果要存储和处理地理数据,则可以考虑空间索引。这可能会加快您的许多查询;开始的地方是documentation

本文链接:https://www.f2er.com/3152988.html

大家都在问