缓存表(汇总表)
假如统计一个网站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;
更快的读,更慢的写
为了挺高查询速度,有时候需要一些额外的索引,冗余,汇总表等,这样数据的写入会更慢一些,但是数据的读取会更快一些,这也是常用的优化手段。