Вставка большого количества записей в Firebird
Домучиваю потихоньку перенос КЛАДР в Firebird. Ну а для этого основная операция — вставка громадного числа записей.
Первоначально шел по пути обработки данных из dbf КЛАДРа на клиенте, и вставке их на сервер. Отключал индексы на таблице, вставлял по одной записи (т.е. не блок из нескольких), коммитил через 1000 вставок. Скрость работы примерно минут 30-40 на 1000000 записей кладра.
Потом узнал о external table. Не сложной манипуляцией dbf файл адоптируется в нужный вид(обрезаем заголовок ), кидается на сервер. На сервере мы его подключаем как внешнюю таблицу и работаем с ним. Плюс написал хранимые процедуры для обработки данных и вставки их (то, что раньше делал на клиенте). Итог — не считая подготовления файлов (а оно занимает от силы не более минуты), этот же миллион записей загрузился за 3,5 минуты.
клиент в первом случае и сервер во втором это одна и таже машина.
Доволен как удав
Нет обратных ссылок на эту запись.
июля 12, 2010 - 07:10
Здравствуйте!
У меня вопрос — а как Вы отключали индексы?
Я вот пытался отключить через «ALTER INDEX IndexName ACTIVE/INACTIVE» но это не помогло, я так понимаю оно влияет только на чтение. Помогло только DROP Index.
Спасибо.
июля 12, 2010 - 11:10
Приветсвую.
Вообще ALTER INDEX должен помочь. Влияет оно и на чтение и на запись. При отключенном идексе чтение медленнее идет, при включенном запись. Надо проверять на конкретной версии firebird`а.
конкретнее подсказать уже не смогу, т.к. ушел от firebird и delphi в сторону oracle. И походу не предвидится возвращение.