使用多达10k条记录动态生成字段内容的总数是否可以接受而不是将总数存储在表中?
我有理由倾向于按需生成总计,但平均家用PC的性能价格有多糟糕? (会有一些联接-ORM管理 - 参与计算总数。)
如果我遗漏了决定答案的重要信息,请告诉我。
编辑:这是用户PC上的一个独立程序。
答案 0 :(得分:4)
通常它完全可以接受,甚至建议重新计算值。如果您开始存储计算值,您将面临一些开销,确保它们始终是最新的,通常使用触发器。
那就是说,如果您的特定计算查询结果需要花费大量时间,您可能需要走这条路线,但只有在实际遇到性能问题时才这样做,而不是事先。
答案 1 :(得分:4)
如果您有适当的索引,那么按需计算就不会太糟糕。我提到索引的原因是你没有指定总数是在列中的所有值上还是在子集上 - 如果它是子集,那么组成过滤器的字段可能需要被索引,所以为了避免表扫描。
答案 2 :(得分:3)
使用Sql查询,您可以使用max函数快速,低成本地获取记录总数。
最好生成总数然后将其保留为记录,就像保留一个人的出生日期并确定他们的年龄然后保持他们的年龄一样。
答案 3 :(得分:2)
您必须获得此总价值的次数和用户数量,以及如何更新总数所依赖的数据。
也许你唯一需要的就是每天做一次这个大查询(或者一次),然后将它保存在db中的某个地方,然后在你的总数被更改的数据中更新它
答案 4 :(得分:1)
你“可以”用SQL计算总数(我假设你不想要总记录数......价格总数或者它是什么)。当数据被告知时,SQL非常擅长数学:)没有存储总数。
但是,由于它全部在客户端计算机上运行,我认为我的首选是使用C#。然后,用于计算总数的业务规则不在DB / SQL中。我的意思是,如果你有一个复杂的计算总需求加上5%的订单低于50英镑的订单,“业务”改变它增加10%的订单低于50英镑,这是在你的“业务逻辑”代码完成比你的存储介质(在这种情况下是SQL)。
善,
丹
答案 5 :(得分:0)
我认为从8000-10000记录中生成总和不应该花费很长时间,可能不到一秒钟。即使在单个PC上,此查询的查询计划也应由单个表扫描控制,这将主要生成顺序I / O.
正确的索引应该使任何联接合理有效,除非架构存在严重缺陷,除非你在表中有(例如)大blob字段,否则行的总数据量应该不是很大。如果您仍然遇到通过O / R映射器的性能问题,请考虑将该功能重新转换为可以控制SQL的报告。