2017-03-26 1 views
0

Ich versuche 100000 + Zeilen Daten aus einer anderen Tabelle zu aktualisieren, aber es dauert zu lange mehr als 120 min ist es eine Möglichkeit, diesen Prozess zu machen schnellAktualisierungsabfrage zu lange dauern, große Daten in MySQL zu aktualisieren

Was ich tue

ich habe zwei Tabelle

+-----------------+   +-----------------------------+ 
|  tags  |   |   items   | 
+-----------------+   +-----------------------------+ 
|id | unq | name |   |id | tag_id | unq | detail | 
+-----------------+   +-----------------------------+ 
| 1 | n1 | Name1 |   | 1 |   | n2 | detail2 | 
| 2 | n2 | Name2 |   | 2 |   | n1 | detail1 | 
| 3 | n3 | Name3 |   | 3 |   | n3 | detail3 | 
| 4 | n4 | Name4 |   | 4 |   | n8 | detail8 | 
| 5 | n5 | Name5 |   | 5 |   | n4 | detail4 | 
| 6 | n6 | Name6 |   | 6 |   | n5 | detail5 | 
| 7 | n7 | Name7 |   | 7 |   | n9 | detail9 | 
| 8 | n8 | Name8 |   | 8 |   | n6 | detail6 | 
|...| ... | ... |   |...|   | ... | ...  | 
+-----------------+   +-----------------------------+ 

ich habe tag_id in Artikel Tabelle Namen unq Spalte aktualisieren

Diese Abfragen verwendet i

Query 1. 

UPDATE `items` 
INNER JOIN tags ON (tags.unq = items.unq) 
SET items.tag_id = tags.id 

-- -------------- and --------------------- 

Query 2. 

UPDATE `items` SET `tag_id`= (SELECT tags.id FROM tags WHERE tags.unq = items.unq Limit 1 

Beide Abfragen i verwendet sie

Ausgabe zu viel Zeit nehmen, ich will

+-----------------------------+ 
|   items   | 
+-----------------------------+ 
|id | tag_id | unq | detail | 
+-----------------------------+ 
| 1 | 2 | n2 | detail2 | 
| 2 | 1 | n1 | detail1 | 
| 3 | 3 | n3 | detail3 | 
| 4 | 8 | n8 | detail8 | 
| 5 | 4 | n4 | detail4 | 
| 6 | 5 | n5 | detail5 | 
| 7 | 9 | n9 | detail9 | 
| 8 | 6 | n6 | detail6 | 
|...| ... | ... | ... | 
+-----------------------------+ 
+0

Können Sie pls die Ausgabe für das Update erklären teilen, um zu sehen, wie MySQL Indizes verwendet (falls vorhanden) in das Update? – Shadow

Antwort

0

Sie können innerhalb der einzelnen folgenden Trick tun Transaktion:
1.

RENAME items to items_old 
  1. Erstellen neuer Tabelle verknüpft Informationen enthalten

CREATE TABLE items_temp AS
SELECT items.id as 'id', tags.id as 'tag_id',
items.unq as 'unq', items.detail as 'detail'
FROM tags INNER JOIN items ON tags.unq = items.unq

Wenn Sie brauchen, Sie kostenlos in Autoinhaltsfeld

ALTER TABLE items MODIFY COLUMN id INT auto_increment 
  1. RENAME items_temp to items

  2. DELETE items_old

Verwandte Themen