每天,我都会运行一条 SQL 语句来设置聚合值的估计值。这是一个 mysql 服务器,代码如下所示:
UPDATE users
INNER JOIN (
SELECT user_id, COUNT(*) AS action_count
FROM action_log
GROUP BY user_id
) AS action_log
ON users.id = action_log.user_id
SET users.action_count = action_log.action_count
随着我的数据库的增长,这需要更长的时间才能运行,并且似乎会影响其他查询。就目前的代码而言,我的 action_log 表上是否存在针对整个更新的锁定?
由于这是一个估计值,不需要完全准确,我正在考虑将其拆分为多个 SQL 语句。一种选择以获取每个用户的聚合计数。然后对每个用户行进行单次更新。
我希望这会有所帮助。运行EXPLAIN
这个查询并没有给我太多信息,我不确定以这种方式分解事情是否真的有帮助。