【问题标题】:How can I limit the number of records inserted on an INSERT INTO at one time如何限制一次插入 INSERT INTO 的记录数
【发布时间】:2012-04-17 14:58:09
【问题描述】:

我想像这样插入我的数据库。但是表格中可能有 200k+ 条记录。我想将插入分成 10,000 个左右的组,我怎样才能仅在 MySQL 中有效地做到这一点?

INSERT INTO `slugs` (`sku`, `tablename`)
select `SKU`, 'tableA'
from `tableA`
WHERE `SKU` NOT IN
(select `sku` from `slugs` where `tablename` = 'tableA');

示例代码:http://sqlfiddle.com/#!2/a75a1/8

【问题讨论】:

  • 为什么要拆分插入?
  • 速度很慢,有人告诉我,如果我把它分成多个交易,它可能会加快速度。

标签: mysql mysql5


【解决方案1】:

试试这个:

SET @rank=0;
select rank
, IF(MOD(rank,10000)=0,CONCAT(IF(MOD(rank,10000)=1,CONCAT("insert ignore into table values (""",NAME,""",""",SKU,""")"),CONCAT(",(""",NAME,""",""",SKU,""")")),";"),IF(MOD(rank,10000)=1,CONCAT("insert ignore into table values (""",NAME,""",""",SKU,""")"),CONCAT(",(""",NAME,""",""",SKU,""")"))) as insert_statement
from (
SELECT @rank:=@rank+1 AS rank,NAME,SKU
from tablea 
) der

【讨论】:

    【解决方案2】:

    在末尾添加LIMIT 10000 并运行它直到插入的行数 = 0。

    如果不是一次性的,你可以在一个带有循环的过程中执行此操作..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2022-07-06
      相关资源
      最近更新 更多