我正在尝试执行这样的查询:
SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
FROM Requests
WHERE Distance < 2
ORDER BY Distance DESC
错误说,没有距离列。 我尝试了一次,但它切断了查询性能
SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
FROM Requests
WHERE dbo.CalculateDistance(Lat,Lon,@lat,@lon) < 2
--ORDER BY Distance DESC
不进行第二次计算,如何实现上述查询? 最诚挚的问候 迈拉
答案 0 :(得分:3)
我发现下面的链接建议您对其值进行嵌套选择和过滤;在这种情况下,标量计算只执行一次。
所以你应该可以做一些像
这样的事情 SELECT Id, Name, Distance FROM (
SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
FROM Requests) derived
WHERE Distance < 2
ORDER BY Distance DESC
我简要介绍了执行计划,标量计算只发生一次。但你当然应该检查指数的使用等。
我希望它能提供一些帮助。