mysql 计数器表

计数器表,用于保存用户的点击量等,通常使用一张独立的小表来存放,里面放一个int值,在每次点击后增加该值。

create table pv(
    count int unsigned not null
) engine=InnoDB;

update pv set count = count + 1;

对于InnoDB,对该行的修改会造成该行的锁定,使得点击后产生的事务只能串行执行。

多行

可以预先定义多行来保存点击量,然后每次更新时使用rand随机选取一行的主键id,更新该行,这样可以提升一些性能。

返回总量时使用sum把表内数据累加即可。

create table pv(
    id tinyint unsigned not null primary key,
    count int unsigned not null
) engine=InnoDB;

update pv set count = count + 1 where id = rand() * 100;

随机行

直接使用插入,使用大范围的随机数或者使用uuid等不会重复的作为id,另加上on duplicate key update处理碰撞问题。

create table pv(
    id char(32) not null primary key,
    count int unsigned not null
) engine=InnoDB;

insert into pv values(rand() * 10000, 1) on duplicate key update count = count + 1;

最后再运行一个定时任务定期把这些行收敛到一行即可,返回总量时仍可使用sum。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值