Sql server 2012 获取到SQL中最近矩阵的距离和持续时间

Sql server 2012 获取到SQL中最近矩阵的距离和持续时间,sql-server-2012,Sql Server 2012,我有一个逻辑来寻找最优化的交付。 比如说,我有位置A,B,C,所以需要从A到B,B到A,A到C,C到A,B到C,C到B的距离和持续时间 我知道如何提出上述问题。示例结果将是小提琴中的NewMatrix 我有一个表格,存储我们根据过去交付的当前矩阵。(上表中的AppMatrix) 所以我需要在这个表中查找距离和持续时间,以找到最接近的匹配起点和终点。我已经创建了以下功能,它可以完美地获得我的答案: SELECT TOP 1 Distance, ([Time]/60) as Duration FR

我有一个逻辑来寻找最优化的交付。 比如说,我有位置A,B,C,所以需要从A到B,B到A,A到C,C到A,B到C,C到B的距离和持续时间

我知道如何提出上述问题。示例结果将是小提琴中的NewMatrix

我有一个表格,存储我们根据过去交付的当前矩阵。(上表中的AppMatrix)

所以我需要在这个表中查找距离和持续时间,以找到最接近的匹配起点和终点。我已经创建了以下功能,它可以完美地获得我的答案:

SELECT TOP 1 Distance, ([Time]/60) as Duration FROM [AppMatrix]
ORDER BY ABS([OriginSiteLat] - @OriginLat) + ABS([OriginSiteLng] - @OriginLong)
,ABS([DestSiteLat] - @DestinationLat) + ABS([DestSiteLng] - @DestinationLong) 
问题是速度慢。因为我需要对每个矩阵执行这些调用(我一天可以有700个不同的交付,700*700=14000,这太慢了-返回结果需要几个小时)

我正在研究如何最好地限制数据,但任何关于如何优化性能的建议都是值得赞赏的。也许关于如何在这里使用spatial的建议会有所帮助

这是我当前的代码:

SELECT * FROM CT as A
INNER JOIN CT AS B ON A.Latitude <> B.Latitude AND A.Longitude<>B.Longitude
CROSS APPLY [dbo].[ufn_ClosestLocation](A.Latitude,A.Longitude, B.Latitude, B.Longitude) R
从CT中选择*作为
内部连接CT作为A.纬度B.纬度和A.经度B.经度上的B
交叉应用[dbo].[ufn_闭合位置](A.纬度,A.经度,B.纬度,B.经度)R

您是否意识到纬度和经度之间的差值不一定是两点之间的实际距离(q.v.哈弗森公式)?@TimBiegeleisen,是的,我明白。我在AppMatrix表中的距离是实际距离。我们有另一个实例,它运行以获取实际距离和时间,并填充该表。但如果找不到,我们只想找到最接近的匹配。你知道纬度和经度之间的差值不一定是两点之间的实际距离(哈弗森公式)?@TimBiegeleisen,是的,我明白。我在AppMatrix表中的距离是实际距离。我们有另一个实例,它运行以获取实际距离和时间,并填充该表。但如果找不到,我们只想找到最接近的匹配项。