将此查询分成批次

时间:2012-01-30 10:23:04

标签: mysql sql

我有一个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不会长时间锁定联系人表。我想到了很少的方法,但他们都需要锁定整个桌子。有没有办法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

如果您只想要关系计数,请像

一样使用计数和分组
SELECT contactee_id,count(contacter_id) FROM contacts group by contactee_id;

这将为您提供每个被联系者的所有contactee_id和contacter_id的数量

答案 1 :(得分:0)

运行某些记录的查询,然后将最后一条记录的id保存在表或文件系统中,从该ID开始下一个查询并在每个周期更新它。

相关问题