在MySQL中更新重表

在MySQL中更新重表,mysql,Mysql,在分析我的服务器之后,我发现更新表中一行的datetime列大约需要5毫秒,因为我大约每秒更新150次,这是一个主要的性能问题。该列未编制索引,存储引擎为InnoDB。该表只有500个条目,更新如下所示(userId是主键): 我试着用以下方法来解决它: 我尝试使用存储引擎内存,因为数据并不那么重要。我计划每1分钟将其内容批量写入用户表。似乎一次更新内存存储引擎也需要5毫秒 我试着用MyISAM。每次更新仍然需要5毫秒 我尝试批处理更新查询。仍然是每个查询5毫秒 为什么更新通常需要5毫秒?有没有

在分析我的服务器之后,我发现更新表中一行的datetime列大约需要5毫秒,因为我大约每秒更新150次,这是一个主要的性能问题。该列未编制索引,存储引擎为InnoDB。该表只有500个条目,更新如下所示(userId是主键):

我试着用以下方法来解决它:

  • 我尝试使用存储引擎内存,因为数据并不那么重要。我计划每1分钟将其内容批量写入用户表。似乎一次更新内存存储引擎也需要5毫秒

  • 我试着用MyISAM。每次更新仍然需要5毫秒

  • 我尝试批处理更新查询。仍然是每个查询5毫秒

  • 为什么更新通常需要5毫秒?有没有一种方法可以更快地更新MySQL?我需要Java中的HashMap之类的东西。甚至不需要100%的持久性,因为我可以定期将其与用户表同步,如果数据偶尔丢失,我也不在乎


    你将如何解决这个问题?顺便说一下,我在Google Cloud Compute上使用了一个复制活动的MySQL实例。

    userId列上有索引吗?
    userId
    应该是表中的一个
    主键。正如我所说的,userId是MySQL引擎解析SQL语句、优化SQL查询、检查特权、,如果您对该表有权限,请打开该表(如果该表未在缓存中打开,请打开随机磁盘I/O),最后更新该表(需要一些磁盘I/O)。所有这些都需要一些时间。如果您正在使用InnoDB,您可以尝试在事务中批处理更新。通常,即使有10000条记录,您的查询也需要大约1毫秒的时间,除非存在受影响的外键关联、更新前后运行的触发器、配置不良的数据库
    (my.cf)
    ,或者日志记录级别设置为高详细度。EXPLAIN UPDATE users SET lastactive=CURRENT\u TIMESTAMP的输出是什么,其中userId=23表还有多少列?
    UPDATE users SET lastactive = CURRENT_TIMESTAMP WHERE userId = 23;