Как сделать быструю вставку 10 - 100 тысяч записей в MySQL? Если сразу нельзя сделать, то какими порциями подавать и через что (буфер, спец команда )
"импорт/экспорт дампа ? не ?" нет. Мое приложение делает поиск среди миллионов, миллиардов записей, данные хранятся вобще в файлах жесткой структуры, надо сделать быстрый инсерт в MySQL, через цикл идет очень медленно может кто нибудь приведет примерный код, как из массива данных из кода отправить в хранимую процедуру MySQL
возможно поможет LOAD DATA INFILE http://dev.mysql.com/doc/refman/5.1/en/load-data.html но точно не в хранимую процедуру. можно сделать триггер на вставку - работает также как и хранимка
100 000 совсем не много. Используйте: Мultiple insert (для InnoDB) INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); Мultiple delayed insert (для MyISAM) INSERT DELAYED INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
"Так а приложение отваливается на каком то этапе? Или в чем затык?" Я делаю поиск по телефонной базе данных за день, в конце дня формируется бинарный файл, в нем порядка 2-3 млн записей о звонках, если я поставлю поиск - выбрать те записи, в которых люди заходили в интернет за полгода, то через цикл инстерт ооочень медленно проивзодится, сводит скоро поиска на нет.... т е за сек 10 вставится порядка 500 записей, я за это время успею 5 файлов обработать при другом условии поиска, допусти выбрать записи, в которых звонил кокретный абонент за конр период времени.... попробую сделать как Вы предложили: Мultiple delayed insert (для MyISAM) INSERT DELAYED INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); только вопрос , до какого размера стринговый буфер накапливать до 1000 скобок со значениями для вставки внутри ? никаких дополнительных команд до и после этой команды не надо вводить?
Почему я такое внимание уделяю этому моменту все дело в том, что я делаю SELECT и в коде пробегаю по каждой строке выборки, сравниваю, если удовлетворяет условию - сохраняю в коллекцию ( Vector) а потом достаю из коллекции по 1 му значению и формирую запрос на INSERT или UPDATE... Т е очень очень часто я буду делать многочисленные вставки INSERT и обновления UPDATE через язык Cи на десятках а то и сотнях тысяч строк
Максимум возможного при вставке большого объёма, можно получить по разному. Например, - InnoDB (или т.п.) - в пределах транзации вставлять несколько сотен/тысяч записей: даёт ~5000 зап/сек (+/-) - Тот самый "Мultiple delayed insert" - также отомарная вставка нескольких записей. По скорости даст такой же порядок величины. Ну ещё пара вариантов возможна.