mysql—复制数据的更好方法?

zaq34kh6  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(271)

我有两张table要复印 post_id 从一张table到另一张table testpostmeta.meta_value = testTable.stockcode 房间里大约有2000排 testTable 6.5万行 testpostmeta .
代码正常,只需1-2分钟即可完成。有什么办法可以加快仓鼠轮的速度吗?

UPDATE testTable 
  INNER JOIN testpostmeta 
    ON testTable.stockcode = testpostmeta.meta_value
   SET testTable.post_id = testpostmeta.post_id

我试着添加 WHERE testpostmeta.meta_value = testTable.stockcode 但那没用。

xtupzzrd

xtupzzrd1#

如果 post_id 在目标表中建立索引,也会减慢更新速度。
尝试在操作之前禁用索引,然后再启用它。因此,您的数据将被索引一次,而不是每次后续的数据更改。

ALTER TABLE targetTable DISABLE KEYS;
-- Your UPDATE query
ALTER TABLE targetTable ENABLE KEYS;

正如参考文献中所说:
如果锁定表,则同时执行多个更新要比一次执行一个更新快得多。
这里有一些参考页,可以提供更多关于可以做什么的想法:
8.2.4.2优化更新语句
8.5.4 innodb表的批量数据加载

uyhoqukh

uyhoqukh2#

确保testtable和testpostemta上有适当的索引

CREATE INDEX my_idx1  ON testTable (stokcode);

CREATE INDEX my_idx2  ON testpostmeta (meta_value , post_id);
kq0g1dla

kq0g1dla3#

你可以停止自动提交

SET autocommit = 0 ;

--Insert/Update/Delete stuff here
COMMIT ;
jaql4c8m

jaql4c8m4#

尝试为每个表添加一个索引,该索引与用于 JOIN 标准:

ALTER TABLE testTable ADD INDEX stockcode_idx(stockcode);
ALTER TABLE testpostmeta ADD INDEX meta_idx(meta_value);

相关问题