2011-03-06 69 views
1

我有2個Innodb表。在TableA中,我有一列(guidNew),我想根據TableA(guid)和TableB(所有者)中的列之間的關係,將其值分配給TableB(所有者)中的列。Mysql更快更新

基本上Tabl6eB(所有者)具有對應於一個TableA(guid)的多個條目。這是一個多對一的關係。我想將TableB(所有者)值更改爲新的TableA(guidNew)值。

這是查詢的一個例子:

UPDATE `TableB`, `TableA` 
SET 
    `TableB`.`owner` = `TableA`.`guidNew` 
WHERE `TableB`.`guid` != 0 
    AND `TableB`.`owner` = `TableA`.`guid`; 

現在我不知道這是工作或沒有,因爲有超過200萬個條目。有沒有辦法知道它的進展,更重要的是一種更快速的方法。

+0

是這種語法在所有合法的嗎? – 2011-03-06 06:15:37

回答

2

確保您已將索引和所有者列編入索引。

嘗試使用EXPLAIN命令,看看正在執行的查詢

EXPLAIN SELECT TableB.owner, TableA.guidNew 
FROM TableB, TableA 
WHERE TableB.guid != 0 
AND TableB.owner = TableA.guid 
+0

您應該在'EXPLAIN SELECT'中添加'TableA.guidNew',否則查詢優化器可能會使用'TableA.guid'上的索引掃描並跳過'TableA'中的讀取操作(這將需要完成'UPDATE')。 – 2011-03-06 06:12:53

+0

謝謝。我希望有一個「解釋更新」,但沒有,我的翻譯是一個猜測。 – 2011-03-06 06:17:56