Apache Derby INSERTS работают медленно

Я использую Apache Derby для хранения большого количества строк порядка десятков миллионов. Каждый раз, когда я инициирую пакетную вставку, я буду вставлять в таблицу еще до 2 миллионов строк. Таблица имеет UUID в качестве первичного ключа и единственное ограничение на UUID в одной другой таблице.Вставка занимает часы !!! Почему ? Я создал ИНДЕКС для всех таблиц, но с тех пор удалил его, так как считаю, что Дерби автоматически создает ИНДЕКС для каждой таблицы с первичным ключом. Я использую пакетное обновление с подготовленным оператором, как показано (в очень простой форме ниже)

final PreparedStatement addStatement = connection.prepareStatement(...)
int entryCount = 0;
  for (final T entry : entries) {
    addStatement.addBatch();
    entryCount++;
    if (entryCount % 1000 == 0) {
    addStatement.executeBatch();
    addStatement.clearBatch();
    entryCount = 0;
    }
 addStatement.close();

Вот результаты

05/01/12 12:42:48 Creating 2051469 HE Peaks in DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:44:18 Progress: Written (10%) 205146/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:46:51 Progress: Written (20%) 410292/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:50:46 Progress: Written (30%) 615438/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE 05/01/12 12:56:46 Progress: Written (40%) 820584/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:04:29 Progress: Written (50%) 1025730/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:13:19 Progress: Written (60%) 1230876/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:22:54 Progress: Written (70%) 1436022/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:34:53 Progress: Written (80%) 1641168/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:47:02 Progress: Written (90%) 1846314/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:58:09 Completed: Written (100%) 2051469/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE - Time Taken:01:15:21

По мере того, как я вставляю все больше и больше строк, процесс становится все медленнее и медленнее (вероятно, из-за ИНДЕКСА). Модель БД, которая у меня есть на данный момент, хорошо служит моим целям, и я не хочу ее менять. Я делаю что-то неправильно ? ... или слишком многого ожидаешь? Есть ли способ улучшить скорость INSERT?


Edit

Я уже настроил БД, используя autocommit и другие. Я обнаружил, что когда ВСТАВЛЯЕТ миллионы записей, мое приложение занимает неоправданно много времени. SELECT на этих данных, конечно, очень быстро.

8
задан Raedwald 2 September 2013 в 15:57
поделиться