我有一个MySQL表联系人,结构如下
+--------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | contactee_id | int(11) | NO | MUL | 0 | | | contacter_id | int(11) | NO | MUL | 0 | | +--------------+----------+------+-----+---------+----------------+
contactee_id和contacter_id都是ID,它们共同定义了两个用户之间的关系。为了计算关系的数量,用户有,我有以下查询
INSERT INTO followers (id, followers) SELECT contactee_id, 1 FROM contacts ON DUPLICATE KEY UPDATE followers = followers + 1
此查询的问题是它会将联系人表锁定太长时间(超过16分钟)。我希望批量完成它,以便SQL不会长时间锁定联系人表。我想到了很少的方法,但他们都需要锁定整个桌子。有没有办法可以做到这一点?
答案 0 :(得分:1)
如果您只想要关系计数,请像
一样使用计数和分组SELECT contactee_id,count(contacter_id) FROM contacts group by contactee_id;
这将为您提供每个被联系者的所有contactee_id和contacter_id的数量
答案 1 :(得分:0)
运行某些记录的查询,然后将最后一条记录的id保存在表或文件系统中,从该ID开始下一个查询并在每个周期更新它。