【问题标题】:MySQL Slow UpdateMySQL 慢更新
【发布时间】:2018-11-18 21:21:36
【问题描述】:

这个查询大约需要 7 秒 (!):

UPDATE summary_daily_users
    SET clicks = clicks + 1
    WHERE sum_date = '2018-11-14'
      AND user_id = 120

我跑了EXPLAIN 得到了这个:

该表有大约 300,000 条记录,sum_date 是 PRIMARY,user_id 是 PRIMARY。

关于如何使UPDATE工作更快的任何建议?

【问题讨论】:

  • 我建议在sum_dateuser_id 上创建一个索引。
  • 表的大小是多少,有多少项与您的 where 子句匹配?
  • 用表记录数更新了我的问题
  • 该表是否还有其他索引,有多少字段?
  • 表是 InnoDB 吗? innodb_buffer_pool_size 是多少? innodb_log_filesize 是多少?什么MySQL版本?这些更新,我认为它们很频繁,sum_date 总是最近的吗? SHOW CREATE TABLE summary_daily_users 也需要输出。您已将 sum_dateuser_id 列为主要,这只有在复合时才会发生 - SHOW CREATE TABLE 信息将澄清这一点。

标签: mysql database performance


【解决方案1】:

如果在sum_dateuser_id 列上添加索引会怎样?表中有多少行,这些列中有多少行的值为“2018-11-14”和“120”?

【讨论】:

  • 索引已经存在,它只适合一行,因为它是一个主索引。
  • 请在您的问题中显示SHOW CREATE TABLE summary_daily_users 输出。不知何故,您的解释表明它不使用 PK
  • @Alexey - PRIMARY KEY 似乎包含两列。添加两个单列索引不会有帮助。
  • @Rick,如果真的有PK,为什么不按照EXPLAIN使用?我想看看 SHOW CREATE TABLE,恕我直言,如果作者需要帮助,在问题中看到这一点真的很有帮助。
  • @Alexey - 为什么不使用 PK?我希望CREATE 能给我们一个线索。我们中的 3 个人要求CREATE;让我们给他几天时间,然后投票结束。
猜你喜欢
  • 2011-09-07
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2017-10-09
  • 2018-12-14
  • 2015-05-17
相关资源
最近更新 更多