mon*_*nim 3 java mysql performance
假设我有一个位置表(纬度,经度),我希望将指定范围内的所有位置都放到我当前位置,我的问题更好:将计算包含在查询的where子句中,类似于,select * from locations where /* formula of cosines and sines of the latitude and longitude */ < distance.
我的第二选择是获取所有位置并在程序中进行本地计算.如果重要的话,我正在使用java和mysql
根据计算的数据和复杂程度,您可以尝试执行两者的混合.使用更简单,更不精确但更便捷的计算(能够利用指数)来减少发送回最终处理的结果.
例如,如果标准是"5英里远",而不是执行涉及几何函数的方程; 你可以计算一个边界框.检索该范围内的行,然后使用更复杂的函数排除"角".
或者,如果您的服务器功能强大,并且预计客户端计算速度相对较弱; 最好将这些计算卸载到服务器上.
编辑:另一种可能性是将更复杂的计算放在HAVING子句中,将更简单的计算保留在WHERE中,这样只需要在传递更简单,更友好的索引的过滤器上执行.
编辑2:给出一个通用的例子(因为我不熟悉使用long和lat;你的方程可能需要考虑地球"包裹").
SELECT *
FROM theTable
WHERE x BETWEEN [minX] AND [maxX]
AND y BETWEEN [minY] AND [maxY]
HAVING POW(x-[originX], 2) + POW(y-[originY], 2) <= POW([distance], 2)
;
Run Code Online (Sandbox Code Playgroud)