資料量比較大的情況下如何統計總數?
例如一個表裡面有500萬條數據,傳統的方式是count(),這樣效率很低。
網路上有人說用mysql的觸發器,把統計結果插入到一個結果表裡。
還有其他方法嗎?例如非同步執行的方式插入到一個mysql的結果表裡可以嗎?
或統計結果放入redis可以嗎?
還有說用定時執行的,但是我們這個使用場景要求即時計算總和。
資料量比較大的情況下如何統計總數?
例如一個表裡面有500萬條數據,傳統的方式是count(),這樣效率很低。
1.網路上有人說用mysql的觸發器,把統計結果插入到一個結果表裡。
還有其他方法嗎?例如非同步執行的方式插入到一個mysql的結果表裡可以嗎?
2.或是統計結果放入redis可以嗎?
還有說用定時執行的,但是我們這個使用場景要求即時計算總和。
3.可以新建一個表用來保存行數資訊
表名(主鍵)|資料量
觸發器的時候如果插入數據,則對應表的資料量+1,如果刪除資料則減1。
4 .還有一種方案就是每次只計算1分鐘的增量(根據你們業務對實時性的要求),上一次的統計值加上1分鐘的增量就是現在的總數。當然這要看有沒有對舊資料進行刪除的操作。我得這種方法跟著透過向表裡插入統計統計結果會有耦合。
我時傾向於用redis來儲存,insert+1,delete-1。 db沒有什麼壓力,同時降低了耦合
用memcache或redis記數就可以了。
需要查count的時候先查memcache,如果沒有的話就去資料庫count,然後在設定上memcache,下次查memcache就有了,就不用去count了。
以上就是資料量比較大 如何更好的實現統計功能?的內容,更多相關內容請關注PHP中文網(www.php.cn)!