2012-04-03 2 views
1

Я хочу сделать вставку в мою базу данных следующим образом. Но в таблице могут быть записи 200k +. Я хочу разделить вставки на группы по 10 000 или около того, как я могу сделать это эффективно только в MySQL?Как ограничить количество записей, вставленных в INSERT INTO за один раз

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

+0

Почему вы хотите, чтобы дробить INSER ц? – mellamokb

+0

Это происходит очень медленно, и мне сказали, если я разделить его на несколько транзакций, это, вероятно, ускорит процесс. – Brad

ответ

1

Добавить LIMIT 10000 до конца и запустить его, пока строки не вставлена ​​= 0.

Если это не один выстрел, вы можете сделать это в порядке с петля ..

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:[email protected]+1 AS rank,NAME,SKU 
from tablea 
) der 
Смежные вопросы