【发布时间】:2012-01-30 10:23:03
【问题描述】:
我有一个MySQL表contacts,结构如下
+--------------+----------+------+------+---------+ ----------------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +--------------+----------+------+------+---------+ ----------------+ |编号 |整数(11) |否 |优先级 |空 |自动增量 | |联系人ID |整数(11) |否 |穆尔 | 0 | | |联系人 ID |整数(11) |否 |穆尔 | 0 | | +--------------+----------+------+------+---------+ ----------------+contactee_id 和contacter_id 都是id,共同定义了两个用户之间的关系。为了计算关系的数量,用户有,我有以下查询
INSERT INTO 关注者(id,关注者)
选择contactee_id,1
来自联系人
在重复键上
更新追随者 = 追随者 + 1
这个查询的问题是它锁定 contacts 表的时间过长(超过 16 分钟)。我想分批完成,这样SQL就不会锁定联系人表太久。我想到了几种方法,但它们都需要锁定整个表。有没有办法做到这一点?
【问题讨论】:
-
您的联系人包含多少行?有多少追随者?能贴一下insert的执行计划吗?
-
联系人表包含约 30m 行。