java - 哪个更好?使用编程语言或使用数据库服务器进行计算

标签 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/

相关文章:

Java - Jboss 中的 javax.faces.el.E​​valuationException : java. lang.LinkageError

C++ 创建对象、初始化列表与赋值?

javascript - 在带有 Node.js 的 Mongoose 中使用虚拟 getter 是否会对性能产生影响?

java - 复制数组元素

java - 为 en-US 和 en_US 创建语言环境有什么区别?

java - 运行 Splunk SDK 示例时出现错误 : "No appropriate protocol (protocol is disabled or cipher suites are inappropriate)"

php - 如何交叉选择一些数据

php - MySQL 到 PHP 再到 XCode?

php - 从 xml 到 --> mysql 数据库

c - 哪个更有效,循环或只是定期添加