MySQL慢速查询,圆内点连接表

MySQL慢速查询,圆内点连接表,mysql,Mysql,我试图让这个查询工作,不幸的是,它相当慢。因此,我猜可能有一个更好的查询来获得我想要的结果 Select samples.X, samples.Y, samples.id, samples.Provnr, samples.costumer_id, avg(lerhalter.lerhalt) from samples left outer join lerhalter on SQRT(POW(samples.X - lerhalter.x , 2) + POW(samples.Y - ler

我试图让这个查询工作,不幸的是,它相当慢。因此,我猜可能有一个更好的查询来获得我想要的结果

Select samples.X, samples.Y, samples.id, samples.Provnr, samples.costumer_id, avg(lerhalter.lerhalt) from samples
  left outer join lerhalter
on SQRT(POW(samples.X - lerhalter.x , 2) + POW(samples.Y - lerhalter.y, 2)) < 100
  where samples.customer_id = 900417
group by samples.provnr
从样本中选择samples.X、samples.Y、samples.id、samples.Provnr、samples.customer\u id、avg(lerhalter.lerhalt)
左外连接勒哈尔特
在SQRT上(POW(samples.X-lerhalter.X,2)+POW(samples.Y-lerhalter.Y,2))<100
其中samples.customer_id=900417
按样本分组
我有表格样本,我想得到所有客户的样本,然后加入“Lerhall”表格。当我进行连接时,每个示例可能有不止一行,因此我想获得列lerhalt的平均值

我想我得到了我想要的结果,但是对于一个只有100个样本的客户来说,查询可能需要10秒。有2000个样品的顾客。 所以我必须得到一个更好的查询时间


有什么建议吗?

一个小小的加速就是省去了SQRT功能。SQRT()在计算时间方面非常昂贵,您只需将比较的右侧调整为100x100=10.000:

Select samples.X, samples.Y, samples.id, samples.Provnr, samples.costumer_id, avg(lerhalter.lerhalt) from samples
  left outer join lerhalter
on (POW(samples.X - lerhalter.x , 2) + POW(samples.Y - lerhalter.y, 2)) < 10000
  where samples.customer_id = 900417
group by samples.provnr
从样本中选择samples.X、samples.Y、samples.id、samples.Provnr、samples.customer\u id、avg(lerhalter.lerhalt)
左外连接勒哈尔特
on(POW(samples.X-lerhalter.X,2)+POW(samples.Y-lerhalter.Y,2))<10000
其中samples.customer_id=900417
按样本分组
另外,您确定需要一个
左侧外部联接
?是否可以使用
内部联接

下一个问题:X和Y是协调的整数值吗?如果不是,它们可以转换为整数吗?整数运算通常比浮点运算快得多


最后,你清楚地做了一个欧几里得距离度量。真的需要吗?另一个距离测量是否能充分发挥作用?也许城市街区距离足以满足您的需求?这将进一步加快速度。

问一个问题。当你得到答案时,问另一个问题两个表的坐标列都是整数。SQRT没有造成太大的差异,但是连接方法tid,内部连接是3,6秒,而不是8秒。我会考虑使用它。。这些样本是GPS记录的土壤样本的结果,这些土壤样本取自农民田地的某个地方。他们分散在一大片地区。我需要为搜索半径指定一个以米为单位的值。还有其他想法吗?尝试了一个结果为1339行的查询,耗时86秒。在现实世界中应用时,它不会用于大于300的结果。但是你知道,你总是想加快速度。你可能会有两个问题。首先对距离进行更粗略的估计,例如使用城市街区距离度量,然后在结果集上应用欧几里德距离演算。这将进一步加快速度,但会变得很麻烦,因为现在需要两个查询。速度的提高往往是有代价的。另外,别忘了投票,如果答案有帮助的话,也可以接受。