如果您能想出一种改进方法,请编辑标题。有效的方法来统计数据库中具有某些特征的对象的数量
我有一张表,其中包含数十行现在,但将有数以百计的生产和最终可能数以千计。我需要计算有多少具有某些特征,例如将enum属性设置为目标枚举。
对于这个问题的缘故,我们会说我是在我的模型:
public enum Types { One, Two, Three, Four }
public Types Type = Types.One; // Or Two, etc.
目前,每次索引页 - 其中列出了这些条目 - 被访问时,我列举(? )One, Two, Three, Four
的计数器并将其显示在页面的顶部。
电流法:
- 遍历表中的每一个对象,检查其属性,并增加相关的计数器(S) - 每个列表加载
潜在方法时间:
- 是任何LINQ更快?即db.MySet.Where(obj => obj.Type == Model.Types.One)
- 我可以随时将这些计数器保存在内存中吗?不知道该怎么做。如果可能的话,将在MyModelController.Create
方法中增加一个潜在的解决方案。
我会试图使用一种完全不同的方法。我会在数据库表上使用触发器来更新单独的“计数器”表中的值。然后,我需要做的就是从计数器表中读取列标题,小心刷新主表的任何更改。触发器只会做CountA = CountA + 1或CountB = CountB-1,这比每次重新计算整个表要快得多。 –
@JonathanWillcock在这里,我想知道如何使用持久数据,当我有一个数据库坐在我面前...我不知道如何捕捉数据库的变化比'Controller.Create'更优雅,但我想这会做到这一点。任何潜在的同步问题?不确定为什么会有,特别是,但这样做会让我担心潜在的丢失增量周期和永久不正确的计数器。 – Sinjai
如果你的触发器是正确的(而且它们确实不难)并且初始值是正确的,那么它们将保持完全一致。如果你感觉特别偏执,你可以经常进行定期检查以保持心情平衡 - 对每一次改变计算所有数字仍然是可取的。 –