緩存表(彙總表)
假如統計一個網站23小時發出的消息數,在一個比較忙碌的網站下不可能隨時維護一個精準的計數器。代替方案是每小時生成一張彙總表,這樣比實時計算要高效的多。
簡單的說就是維護一些複雜 耗時的計算 那麼用匯總表是比較好的選擇。
計數器表
要計數我們可以創建一個計數器表。
create table hit_counter(cnt int unsigend not null)engine=innodb;
每次網站有點擊就進行更新
update hit_counter set cnt = cnt + 1;
缺點 每次進行更新都會鎖表,那麼會有很多的等待。
爲了提高性能可以把計數保存在多行中
create table hit_counter(slot tinyint unsigned nut null primary key,cnt int unsigned not null)engine = innodb;
更新數據時可以這樣:
update hit_counter set cnt = cnt + 1 where slot = RAND() * 100;
獲取數據
select sum(cnt) from hit_counter;
更快的讀,更慢的寫
爲了挺高查詢速度,有時候需要一些額外的索引,冗餘,彙總表等,這樣數據的寫入會更慢一些,但是數據的讀取會更快一些,這也是常用的優化手段。