如何在执行速度方面优化此查询

时间:2013-08-08 14:11:00

标签: mysql

此查询应该为我提供与笛卡尔坐标中给定:x:y最接近的元素。

SELECT `type`
FROM `mapgen_centers`
ORDER BY SQRT(POW((:x - `x`), 2) + POW((:y - `y`), 2))
LIMIT 1

它目前平均需要0.002秒,这是可以的,但我觉得这可能会更好,特别是因为我目前非常,经常和频繁地开火,所以整个脚本的执行都会持续几分钟

可以(以及如果,如何)通过标准MySQL安装上提供的任何方法(过程,函数,索引,配置......)进行优化

3 个答案:

答案 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毫秒......