Вставка 1 миллиона записей в базу данных MySQL - PullRequest
1 голос
/ 17 ноября 2011

Я хочу вставить 1 миллион записей в базу данных с такими же значениями, но уникальными первичными ключами.Я не хочу сначала записывать записи в файл, а затем импортировать этот файл в базу данных.Пожалуйста, предоставьте эффективный запрос, который я могу выполнить для этого.

Ответы [ 4 ]

3 голосов
/ 17 ноября 2011

Вы можете попробовать:

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
    SET @x = 0;
    REPEAT 
        INSERT INTO your_table SELECT NULL, field1, field2;
        SET @x = @x + 1; 
    UNTIL @x > p1 END REPEAT;
END

и выполнить эту процедуру с p1 в качестве нужного количества записей.
Просто для ясности: в SELECT NULL, field1... NULL параметр для поля id, который будет автоматически сгенерирован, если определен как AUTO_INCREMENT PRIMARY KEY.

1 голос
/ 17 ноября 2011

Используйте генератор строк: http://use -the-index-luke.com / blog / 2011-07-30 / mysql-row-generator # mysql_generator_code

например.,

INSERT INTO table_name
       (id, c1,c2,c3,c4)
SELECT gen.n, 1,2,3,4
  FROM generator_1m;
0 голосов
/ 17 ноября 2011

установите первичный ключ вашей таблицы как auto_increment в mysql.

Я показываю вам пример php с условием while.следуйте этой простой логике на любом языке для достижения.

$a = 150000; // set the count you need
$i=0;
while($i < $a)
{


$name = 'sample';

$segment = "insert into table values
(null,'$name')";



$ss = mysql_query($segment);



echo mysql_error();

$i++;


}
0 голосов
/ 17 ноября 2011

Два предложения:

  1. Использовать INSERT DELAYED.Из руководства :

    Если вы используете ключевое слово DELAYED, сервер помещает строку или строки для вставки в буфер, а клиент, выдающий INSERT DELAYEDЗаявление может быть продолжено немедленно.Если таблица используется, сервер хранит строки.

    Как указывает @Matt в комментарии, INSERT DELAYED устарела с MySQL 5.6.6.В 5.7 он принят, но игнорируется, и в руководстве говорится, что он будет удален в будущем выпуске MySQL.Не используйте его.

  2. Используйте транзакции.MySQL будет знать, что ему не нужно обновлять индексы, пока вы не внесете изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...