【发布时间】:2019-10-09 06:23:21
【问题描述】:
我有一个名为"ITEM_REVIEW" 的表,其中有一列名为"score"。
我知道我可以通过以下方式获得score 的平均值:
SELECT AVG(score) FROM "ITEM_REVIEW" WHERE "item_id"=1
即使记录堆积,这是计算平均值的正确(有效)方法吗?还是在我的 NodeJS 服务器上获取数据并计算平均值更好?
【问题讨论】:
标签: postgresql average
我有一个名为"ITEM_REVIEW" 的表,其中有一列名为"score"。
我知道我可以通过以下方式获得score 的平均值:
SELECT AVG(score) FROM "ITEM_REVIEW" WHERE "item_id"=1
即使记录堆积,这是计算平均值的正确(有效)方法吗?还是在我的 NodeJS 服务器上获取数据并计算平均值更好?
【问题讨论】:
标签: postgresql average
我将其简化为
SELECT AVG(ir.score) FROM "ITEM_REVIEW" ir
是的,将一百万行保存在快速硬盘上的数据库中并计算通过网络连接传递的单个浮点数比通过网络连接将一百万个浮点数传输到共享的浮点数要高效得多具有更多不同职责的服务器并使用一些慢速 JavaScript 来计算平均值
数据库非常擅长存储、整理、连接和处理数据;这是他们存在的唯一目的/全部理由。聪明人团队将所有时间都花在实施和改进数据处理功能的性能上,以确保他们的数据库处于领先地位。尽可能将数据保留在数据库中,并在慢速网络链接上拖动尽可能少的字节数(始终在数据库中进行汇总和过滤)
【讨论】:
SELECT AVG(bbb.score) FROM (SELECT * FROM "ITEM_REVIEW") as bbb)和现在出现的问题(他编辑了SELECT AVG(score) FROM "ITEM_REVIEW" WHERE "item_id"=1)非常不同。我没有经常引用问题的习惯,但也许我应该这样做。如果您确实发现有人回答了一个似乎没有被问到的问题;检查时间(在这种情况下,单击问题下的“9 小时前编辑”)以查看问题在发布答案时可能出现的情况
如果你真的在乎,你应该试试看。这样您就可以获得版本、硬件、配置等的正确答案。请特别注意内存使用情况,因为 NodeJS 可能会在平均数据之前将所有数据存储在内存中。
但一般来说,尝试在数据库之外重新实现数据库将会失败。并非总是如此,但一般而言。
【讨论】: