我有一个逻辑来找到最优化的执行交付。 可以说,我有位置A,B,C。因此需要从A到B,B到A,A到C,C到A,B到C和C到B的距离和持续时间。
我知道如何推出上述查询。示例结果将是小提琴中的NewMatrix。
http://sqlfiddle.com/#!6/9cce7/1
我有一个表格,我根据过去的交货存储当前的矩阵。 (上表中的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,这太慢了 - 返回结果需要几个小时)
我正在努力研究如何限制数据,但是对于如何优化性能的任何建议都表示赞赏。也许有关如何在这里使用空间的建议会有所帮助。
这是我目前的代码:
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