我有一个网站,每当用户观看内容时,总观看次数就会增加1 基于会话的。我观察了一段时间的慢查询日志,有趣的是这个查询看起来很慢。
这是我使用的查询;
UPDATE video_content SET views = views+1 WHERE id = 'XXX';
示例日志;
UPDATE video_content SET views = views+1 WHERE id = 'XXX';
# Time: 170123 16:49:35
# User@Host: XYXY_dbE56[XYXY_dbE56] @ localhost []
# Thread_id: 6297490 Schema: XYXY QC_hit: No
# Query_time: 3.145292 Lock_time: 0.000045 Rows_sent: 0 Rows_examined: 1
# Rows_affected: 1
SET timestamp=1485179375;
我正在使用在CentOS下运行的MariaDB最新版本。一切都是最新的,200-400用户是在线实时的。
我有比这更重的查询,它们同时执行,但它们没问题。有没有办法优化这个查询?
提前致谢!
答案 0 :(得分:1)
当你在一行上有许多并发更新时,可能是由于行争用造成的。有很多方法可以解决这个问题,例如,
使用更快的内存数据库,例如redis
使用像
这样的时隙架构创建表计数器( id int, count int )
当你增加视图时你可以
update counter set count+1 where id = FLOOR(RAND()*100)
你可以将所有行的数量相加以获得最终的计数器值。 假设你已经预先插入了100个计数器行
答案 1 :(得分:1)