2011-10-27 14 views
1

我有451座城市坐标。现在我想计算每个城市之间的距离,然后按照这个距离排列一些结果。现在我有2个选项:这些会更安全/更好地运行?

  1. 我可以运行一个循环来计算每个可能的城市组合的距离并将它们存储到一个表中,这将导致大约200k行。
  2. 或者,我可以不经预先计算就离开城市,然后显示结果(每页大约30个),然后分别计算每个城市的距离。

我不知道哪个会更好,但我宁愿选择一个,在这种情况下,我有另一个担心:有没有办法让我尽可能少出行?目前,我认为可能性为451^2,但我认为我可以将其除以2,因为City1-City2的距离与City2-City1相同。

感谢

+0

如果您想知道哪个性能更好,请尝试一下。拿出示例数据和一些可以运行的查询,并针对每个选项尝试它们。比猜测好得多。 –

+0

我不是在猜测。我只是想看看是否有任何证明可以更快速地工作/减轻负担。 – ItsGreg

+1

我明白。尽管从问题的角度来看,两者都应该合理快速地实施。但是,如果城市列表是静态的,@ Ivan的答案是有道理的。 –

回答

0

如果你的城市的表是或多或少是静态的,那么你一定要每个计算所有的距离,并将它们存储在单独的表。在这种情况下,你将有(451^2/2)行(只要确保City1的id始终低于City2的id(或者其他方式,并不重要))。

-1

通常,单个MySQL查询的成本非常高,数学运算的成本非常低。特别是如果你的地图比例很小并且所需的精度很低,那么你可以用一个固定的度数计算距离,计算起来会更快。

此外,如果由于项目发生变化而导致城市数量增加,并且因此您必须在数据库中存储的组合数超过限制,则会出现问题。

所以你可能会更好,没有预先计算。

+0

MySQL不会对表格大小进行人为限制,所以组合数量不会成为问题。此外,OP似乎只是想根据距离返回记录,这对于数据库来说是微不足道的(例如:按距离升序排序,限制为5)。最后,城市坐标不会经常变化,所以预先计算的距离实际上可以节省处理时间。精确度可以在MySQL中修复。由于OP将会进行SQL查询,因此SQL查询的成本并不是真正的重要问题。 –