<分区>
假设我有一个位置表(纬度,经度),我想获取指定范围内的所有位置到我当前位置,我的问题是更好:将计算包含在查询的 where 子句中,类似于 select * from locations where /* formula of cosines and sines of the latitude and longitude */ < distance
.
我的第二个选择是获取所有位置并在程序中本地进行计算。如果重要的话,我正在使用 java 和 mysql
标签 java mysql performance
<分区>
假设我有一个位置表(纬度,经度),我想获取指定范围内的所有位置到我当前位置,我的问题是更好:将计算包含在查询的 where 子句中,类似于 select * from locations where /* formula of cosines and sines of the latitude and longitude */ < distance
.
我的第二个选择是获取所有位置并在程序中本地进行计算。如果重要的话,我正在使用 java 和 mysql
最佳答案
根据计算的数据和复杂性,您可以尝试将两者结合使用。使用更简单、不太精确但更方便的计算(能够利用索引)来减少发回进行最终处理的结果。
例如,如果条件是“5英里远”,而不是执行涉及几何函数的方程;你可以计算一个边界框。检索该范围内的行,然后使用更复杂的函数排除“角落”。
或者,如果您的服务器功能强大并且预期客户端的计算能力相对较弱;无论如何,最好将这些计算卸载到服务器。
编辑:另一种可能性是将更复杂的计算放在 HAVING 子句中,将更简单的计算保留在 WHERE 中,这样它只需要在通过更简单、索引更友好的过滤器的那些上执行。
Edit2:举一个通用的例子(因为我不熟悉使用 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)
;
关于java - 哪个更好?使用编程语言或使用数据库服务器进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637126/