- 汇总表是用来进行优化积累查询的。例如,要计算一个网站在24小时内发送消息的数量,如果将整张消息记录表都统计一遍,就会变得效率低下。设置一张汇总表,每一条记录里存放着每一个小时内的消息数量,然后我们可以查询这张汇总表,而不用查询整张消息记录表。当然,由于是整小时记录,所以表中数据并不是24小时内的数据,还要在消息记录表中查询边界值。
- 缓存表对优化搜索和检索查询语句非常有效
计数器表
- 常用在网站的统计功能上面
- 可以单独设置一个计数表,然后对于每一次动作触发都更新一下计数器表
- 例如一个网站点击量计数器表,内容是
create table hit_counter(
cnt int unsigned not null
)engine=InnoDB
- 对于计数器表,有一个问题,就是多个触发只能串行执行,因为只有一条记录,所以一种思路是先插入多个记录,比如100条记录,然后每次随机选个记录更新,最后再用sum计算总和就可以了,这样就可以进行行内并发了,语句如下
create table hit_counter(
slot tinyint unsigned not null primary key,
cnt int unsigned not null
)engine=InnoDB
- 当然,一般我们常用隔天计数,这时候为了实现这种机制,我们可以加入一个day属性,用来记录插入记录的日期。上面说了,我们需要主动插入一个100个值,从而实现并发。在mysql中,有一种语句叫做
on duplicate key,就是在插入的时候,如果在插入位置已经有了一项记录之后,就会自动变为更新语句。所以,insert语句可以变为
insert into daily_hit_counter (day,slot,cnt) values (CURRENT_DATE,RAND()*100,1)
ON DUPLICATE KEY UPDATE cnt=cnt+1;