Mysql 查询修改以获得最佳性能
Mysql query modification for best Performance
我在 MySQL 查询中使用 Round() 函数来获取精度为 3 的 SUM() 值。但我不确定这是最好的方法还是获取实际值并在 java 或 js 中四舍五入。
我有点困惑哪个是最佳实践,为什么?
Select ROUND(SUM(ORDER_VALUE),3) from Orders
或
Select SUM(ORDER_VALUE) from Orders group by STOCK_ID:
after that
DecimalFormat formatter = new DecimalFormat("0.000");
System.out.println(formatter.format(25.0));
SELECT SUM(ROUND(ORDER_VALUE,3)) FROM Orders
您想知道在 MySQL 中还是在您的应用程序中四舍五入到三位小数更好。
只要SQL语句包含SUM(ORDER_VALUE)
,就没关系,至少就准确性而言。在四舍五入之前,SUM()
运算使用它所运算的列的精度。
而且,您的选择之间的性能差异太小,无法衡量。远小于一微秒。
因此,问题在于使您的代码清晰,并且易于推理,因为它可能如此。您正在处理别人的钱,并且您希望能够说服自己您做对了。
当未来的客户问到精度的第四和第五位数字发生了什么变化时,您希望给出一个简短而正确的答案。
对于您和一年后您未来的自己以及您的同事来说,阅读 SQL 中的 ROUND 或 Java 中的字符串格式化内容是否更容易?
我赞成将业务规则放在代码中的一个地方。 SQL SUM
是业务规则,因此 ROUND
应该与它一起使用。
我在 MySQL 查询中使用 Round() 函数来获取精度为 3 的 SUM() 值。但我不确定这是最好的方法还是获取实际值并在 java 或 js 中四舍五入。 我有点困惑哪个是最佳实践,为什么?
Select ROUND(SUM(ORDER_VALUE),3) from Orders
或
Select SUM(ORDER_VALUE) from Orders group by STOCK_ID:
after that
DecimalFormat formatter = new DecimalFormat("0.000");
System.out.println(formatter.format(25.0));
SELECT SUM(ROUND(ORDER_VALUE,3)) FROM Orders
您想知道在 MySQL 中还是在您的应用程序中四舍五入到三位小数更好。
只要SQL语句包含SUM(ORDER_VALUE)
,就没关系,至少就准确性而言。在四舍五入之前,SUM()
运算使用它所运算的列的精度。
而且,您的选择之间的性能差异太小,无法衡量。远小于一微秒。
因此,问题在于使您的代码清晰,并且易于推理,因为它可能如此。您正在处理别人的钱,并且您希望能够说服自己您做对了。
当未来的客户问到精度的第四和第五位数字发生了什么变化时,您希望给出一个简短而正确的答案。
对于您和一年后您未来的自己以及您的同事来说,阅读 SQL 中的 ROUND 或 Java 中的字符串格式化内容是否更容易?
我赞成将业务规则放在代码中的一个地方。 SQL SUM
是业务规则,因此 ROUND
应该与它一起使用。