mab*_*rei 5 c# t-sql sql-server
我想计算gps-point之间的距离,以获得第一个和最后一个点之间的完整距离.
我的问题是:什么更快?
我谈到大约400,000行.
我肯定会尝试在服务器上执行此操作 - 尽量避免仅仅为了计算单个数字(最后)而拖下 400'000 行。
另外:如果可能的话,我会尝试在没有光标的情况下进行操作。游标是 SQL Server 上的噩梦 - 应该不惜一切代价避免它们。
在您的情况下 - 不知道您的详细表结构 - 您绝对可以执行例如递归 CTE(通用表表达式),从第一个元素开始,总距离为 0.0,然后递归地总结所有其他路径点,计算距离点 (x+1) 和点 x 之间,然后求和为之前的总和。
最后,您应该有一个 CTE,显示所有航点、任意两个航点之间的所有距离以及整个旅程的总距离。
CTE 类似于:
;WITH Waypoints AS
(
-- anchor your query
SELECT
WaypointID, PrevWaypointID, Long, Lat, 0.0 as Distance, 0.0 as SumOfDistance
FROM
dbo.Waypoint
WHERE
PrevWaypointID IS NULL -- or some other condition
UNION -- recurse
SELECT
WaypointID, Long, Lat,
dbo.GetDistanceBetween(wp.WaypointID, pts.WaypointID), -- distance
pts.SumOfDistance + dbo.GetDistanceBetween(wp.WaypointID, pts.WaypointID) -- sum
FROM
dbo.Waypoint wp
INNER JOIN
Waypoints pts ON wp.PrevWaypointID = pts.WaypointID
WHERE
(some condition; ID = 1 or PreviousWaypointID IS NULL or something)
)
SELECT * FROM Waypoints
Run Code Online (Sandbox Code Playgroud)