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

F.P*_*F.P 6 mysql

这个查询应该给我一个最接近给定的元素:x,:y在笛卡尔坐标系中.

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

它目前平均需要0.002s,这是可以的,但我觉得这可能会更好,特别是因为我目前非常,经常和频繁地发射它,所以脚本的整个执行堆积到几分钟.

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

rev*_*eer 1

除了消除平方根之外,我认为这不能做得更好。您应该检查的是执行时间是否确实是O(n),它必须是,因为您必须至少搜索所有元素一次。这可以通过检查执行时间是否随数据库中的表大小线性增加来完成。因此,如果在 100000 行的表上需要 10 毫秒,那么在 1000000 行的表上应该只需要 100 毫秒......