Подача данных в черную дыру
CREATE TABLE `test`.`blackhole` (
`t1_f1` int(10) unsigned NOT NULL,
`t1_f2` int(10) unsigned NOT NULL,
`t2_f1` ... and so on for all the tables and all the fields.
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1;
Обратите внимание, что это таблица blackhole
, поэтому данные идут в никуда.
Однако вы можете создать триггерна столе черной дыры, что-то вроде этого.
И передать его с помощью триггера
delimiter $$
create trigger ai_blackhole_each after insert on blackhole for each row
begin
declare lastid_t1 integer;
declare lastid_t2 integer;
insert into table1 values(new.t1_f1, new.t1_f2);
select last_insert_id() into lastid_t1;
insert into table2 values(new.t2_f1, new.t2_f1, lastid_t1);
etc....
end$$
delimiter ;
Теперь вы можете заполнять таблицу blackhole одним оператором вставки на полной скорости и даже вставлять несколько строк в одинgo.
insert into blackhole values(a,b,c,d,e,f,g,h),(....),(...)...
Отключение обновлений индекса для ускорения работы
ALTER TABLE $tbl_name DISABLE KEYS;
....Lot of inserts
ALTER TABLE $tbl_name ENABLE KEYS;
Отключение всех неуникальных обновлений ключей и ускорениевставка. (ключ автоинкремента уникален, поэтому на него это не влияет)
Если у вас есть какие-либо уникальные ключи, и вы не хотите, чтобы MySQL проверял их во время массовой вставки, убедитесь, что вывыполните alter table
, чтобы исключить уникальный ключ и включить его впоследствии.
Обратите внимание, что alter table
для возврата уникального ключа займет long time.