更新查询需要太长时间才能更新mysql中的大量数据

时间:2017-03-26 14:31:28

标签: mysql sql

我正在尝试从另一个表中更新100000多行数据,但是需要太长时间才能超过120分钟才能使这个过程更快

我在做什么

我有两张桌子

+-----------------+         +-----------------------------+
|      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 |
|...| ... |  ...  |         |...|         | ... | ...     |
+-----------------+         +-----------------------------+

我必须代表tag_id

更新项目表中的unq

我使用的这些查询

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

我使用的两个查询都花费了太多时间

想要输出

+-----------------------------+
|            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 |
|...|   ...   | ... |   ...   |
+-----------------------------+

2 个答案:

答案 0 :(得分:0)

您可以在单笔交易中执行以下操作:
1。

RENAME items to items_old
  1. 创建包含已加入信息的新表格
  2. 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

    如果您需要, 你可以添加autoinc字段

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

    2. DELETE items_old

答案 1 :(得分:0)

Serial.println(String(combinedArray)语句以非常高的速度将文本文件中的行读取到表中。

您可以LOAD DATA INFILE数据并将其写入文件,然后通过此方法将数据加载到另一个表中。

有关更多信息,请检查Documentation