gpt4 book ai didi

c# - T-SQL Fastforward 游标与 foreach

转载 作者:太空狗 更新时间:2023-10-29 22:24:27 29 4
gpt4 key购买 nike

我想计算 gps 点之间的距离以获得第一个点和最后一个点之间的完整距离。

我的问题是:什么更快?

  • 将所有行加载到数据表中并通过 foreach 在 c#.net 中计算它或
  • 在 Sql-Server 上使用带有 FastForward 的存储过程光标。

我说的是大约 400,000 行。

最佳答案

我肯定会尝试在服务器上执行此操作 - 尽量避免拖下 400'000 行只是为了计算一个数字(最后)。

此外:如果可能的话,我会尝试不使用光标。游标是 SQL Server 上的噩梦 - 应不惜一切代价避免它们。

在你的情况下——不知道你的详细表结构——你绝对可以做,例如一个递归CTE(Common Table Expression),从第一个元素开始,总距离为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

关于c# - T-SQL Fastforward 游标与 foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4817396/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com