我有两个表,其中一个大致如下:
client_ip server_ip speed
--------- --------- -----
1.2.3.4 9.1.2.3 100
1.2.3.5 9.1.2.3 1033和另一个有地理数据的:
ip latitude longitude
------- -------- ---------
1.2.3.4 13.75 100.21
1.2.3.5 21.1234 141.21
9.1.2.3 13.75 99.21我想写一个select查询,它计算出两个IP地址之间的大圆圈距离,按它分组,并计算平均速度。因此,例如,理想的输出应该是这样的:
distance avg(speed)
-------- ----------
21 99
100 1234虽然我知道在SQL中有关于获得大圆距离的good resources out there,但我对如何有效地连接这两个表感到有点困惑,因为这两个表都相当大(数百万行)。
有什么建议吗?
发布于 2013-01-24 06:14:38
嗯,连接可能不是这个查询中最慢的部分,它将是每一行的距离计算……
SELECT
client_ip,
server_ip,
avg(speed),
{your distance calculation} AS distance
FROM
speeds
JOIN geo AS geo_client ON geo_client.ip=speeds.client_ip
JOIN geo AS geo_server ON geo_server.ip=speeds.server_ip
GROUP BY
distance这是您的连接,但请注意,距离计算是在每一行上完成的,有数百万行,您将在那里受到很大影响。你可以尝试一些东西,也许可以看看其他的帖子:
https://stackoverflow.com/questions/14489213
复制相似问题