繁体   English   中英

MySQL增加查看计数查询-非常慢

[英]MySQL Increase View Count Query - Very Slow

我有一个网站,每当用户查看内容时,总观看次数就会增加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个用户是实时在线的。

我有比这同时执行的查询更重的查询,但它们很好。 有什么方法可以优化此查询?

提前致谢!

当您在一行上有多个并发更新时,可能是由于行争用。 有很多解决方法,例如

  • 使用更快的内存数据库,例如redis

  • 使用类似

    创建表计数器(id int,count int)

当您增加视图时,您可以

update counter set count+1 where id = FLOOR(RAND()*100)

并且您可以将所有行的计数求和以获得最终的计数器值。 假设您已经预先插入了100个计数器行

根据您提供的信息很难说。

  1. 尝试获取更多信息查询发生了什么。 这可以通过EXPLAIN完成

查询缓慢的原因有很多。 这取决于表的结构,数据库的内存,磁盘的速度(1秒内有多少个I / O)等。

如果执行更复杂的查询,则表结构可能会出现问题。 解决方案可能是只为计数创建单独的表。

您也可以使用iostat监视CPU统计信息和输入/输出统计信息。

编辑:经过一段时间后,我意识到我可以更详细地表结构。 一列索引和多列索引。 可能有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM