Mysql 将此查询拆分为批
我有一个MySQL表contacts,其结构如下 +--------------+----------+------+-----+---------+----------------+ | 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 | | +--------------+----------+------+-----+---------+----------------+ +--------------+----------+------+-----+---------+----------------+ |字段|类型|空|键|默认|额外| +--------------+----------+------+-----+---------+----------------+ |id | int(11)| NO | PRI | NULL |自动增量| |联系人id国际(11)编号MUL 0| |接触器识别号int(11)编号MUL 0| +--------------+----------+------+-----+---------+----------------+ 联系人id和联系人id都是id,共同定义了两个用户之间的关系。为了计算关系的计数,用户有,我有以下查询 INSERT INTO followers (id, followers) SELECT contactee_id, 1 FROM contacts ON DUPLICATE KEY UPDATE followers = followers + 1 插入追随者(id,追随者) 选择联系人id,1 来自联系人 关于重复密钥 更新关注者=关注者+1Mysql 将此查询拆分为批,mysql,sql,Mysql,Sql,我有一个MySQL表contacts,其结构如下 +--------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+----------+------+-----+---------+----------------+ | id | int(
此查询的问题是它锁定联系人表的时间太长(超过16分钟)。我想分批完成,这样SQL就不会长时间锁定contacts表。我想有几种方法,但它们都需要锁定整个桌子。有什么方法可以做到这一点吗?如果您只想计算关系的数量,请将计数和分组方式一起使用,如
SELECT contactee_id,count(contacter_id) FROM contacts group by contactee_id;
这将为您提供所有联系人id和每个联系人的联系人id数量运行一些记录的查询,然后将最后一条记录的id保存在表或文件系统中,从该id开始下一次查询,并每个周期更新一次。您的联系人包含多少行?有多少追随者?您能发布插入的执行计划吗?Contacts表包含约30m行。分组也会锁定该表。