如果您能想出一種改進方法,請編輯標題。有效的方法來統計數據庫中具有某些特徵的對象的數量
我有一張表,其中包含數十行現在,但將有數以百計的生產和最終可能數以千計。我需要計算有多少具有某些特徵,例如將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
如果你的觸發器是正確的(而且它們確實不難)並且初始值是正確的,那麼它們將保持完全一致。如果你感覺特別偏執,你可以經常進行定期檢查以保持心情平衡 - 對每一次改變計算所有數字仍然是可取的。 –