【发布时间】:2013-08-10 07:09:50
【问题描述】:
这个查询应该给我最接近给定:x、:y 在笛卡尔坐标中的元素。
SELECT `type`
FROM `mapgen_centers`
ORDER BY SQRT(POW((:x - `x`), 2) + POW((:y - `y`), 2))
LIMIT 1
目前平均需要 0.002s 还可以,但我觉得这可以更好,特别是因为我目前非常非常频繁和频繁地触发它,因此整个脚本的执行堆积到几分钟.
可以(以及是否,如何)通过标准 MySQL 安装(过程、函数、索引、配置等)上可用的任何方式对其进行优化
【问题讨论】:
-
您可以考虑添加一个带有公式结果的列:
SQRT(POW((:x - x), 2) + POW((:y - y), 2))并在其上添加一个索引 -
但是
:x,:y每次执行都会改变?如果以前不知道值,如何使用该公式创建列? -
你真的需要使用
SQRT,因为它只用于排序吗?是不是当 (x'-x)^2 + (y'-y)^2 变大时,它的平方根也变大了? -
@Florian 我明白了......我误读了这个问题,抱歉
标签: mysql