此查询应该为我提供与笛卡尔坐标中给定:x
,:y
最接近的元素。
SELECT `type`
FROM `mapgen_centers`
ORDER BY SQRT(POW((:x - `x`), 2) + POW((:y - `y`), 2))
LIMIT 1
它目前平均需要0.002秒,这是可以的,但我觉得这可能会更好,特别是因为我目前非常,经常和频繁地开火,所以整个脚本的执行都会持续几分钟
可以(以及如果,如何)通过标准MySQL安装上提供的任何方法(过程,函数,索引,配置......)进行优化
答案 0 :(得分:3)
1.您可以使用MySQL spatial extension。
2.Strip SQRT功能,因为在订购时不需要。
答案 1 :(得分:2)
由于你在计算两点之间的距离,我认为你可以使用MySQL spatial data type在SO中有question可以帮助你。
或者,正如他们在上面的评论中所说,你可以通过预先计算的距离值建立一个指数。
答案 2 :(得分:1)
除了删除那个平方根之外,我不认为这可以做得更好。您应该检查的是执行时间实际上是O(n)
,它必须是,因为您必须至少搜索一次所有元素。这可以通过检查执行时间与数据库中的表大小线性增加来完成。因此,如果在100000行的表上需要10毫秒,那么在1000000行的表上它应该只需要100毫秒......