1

このようにデータベースに挿入したいと思います。ただし、テーブルには 20 万件以上のレコードが含まれる場合があります。挿入を 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

4

2 に答える 2

1

最後に a を追加し、LIMIT 10000挿入された行数 = 0 になるまで実行します。

一発じゃないならループで手順でやればいい。

于 2012-04-03T22:11:05.663 に答える
0

これを試して:

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
于 2015-07-13T22:23:08.353 に答える