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

时间:2017-02-22 07:56:21

标签: php mysql

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

我有比这更重的查询,它们同时执行,但它们没问题。有没有办法优化这个查询?

提前致谢!

2 个答案:

答案 0 :(得分:1)

当你在一行上有许多并发更新时,可能是由于行争用造成的。有很多方法可以解决这个问题,例如,

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

  • 使用像

    这样的时隙架构

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

当你增加视图时你可以

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

你可以将所有行的数量相加以获得最终的计数器值。 假设你已经预先插入了100个计数器行

答案 1 :(得分:1)

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

  1. 尝试获取有关查询的更多信息。这可以通过EXPLAIN
  2. 完成

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

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

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

    编辑: 一段时间后,我意识到我可以更具体地了解表格结构。有一个列索引和多列索引。可能有问题。