2013-12-12 30 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 
;