2013-12-12 26 views
0

我试图使用下面的语句第二个表格填写一些缺失的数据在一个表(XX和YY设置为整数值。双表mysql更新语句超时 - 我做错了什么?

update ignore sub, user set sub.username=user.username 
where sub.id>=XX and sub.id<YY and user.id=sub.user_id 
and sub.status>0 and sub.username is null 

子被索引的ID 用户索引上ID

对于有相应用户值的子表的一部分,这样做很好,但是当用户值无法找到时开始超时。为什么mysql在这方面遇到麻烦?有没有更好的方法来实现这一点?

+0

你能追加一个确切的错误信息?这是“锁定等待超时”还是其他超时?查询需要多长时间? – krokodilko

回答

0

您可能会缺少user_id字段中的索引子表。

添加索引是这样的:

ALTER TABLE `sub` 
ADD INDEX (`user_id`); 

如果查询仍然缓慢来看这并后的结果:

EXPLAIN SELECT * 
FROM 
    `sub`, 
    `user` 
WHERE 
    `sub`.`id` >= XX 
    AND `sub`.`id` < YY 
    AND `user`.`id` = `sub`.`user_id` 
    AND `sub`.`status` > 0 
    AND `sub`.`username` IS NULL 
;