Является ли стоимость времени постоянной при массовой вставке данных в индексированную таблицу?

Я создал архивную таблицу, в которой будут храниться данные только для выбора.

Ежедневно появится программа для переноса партии записей в архивную таблицу. Есть несколько столбцов, которые проиндексированы; в то время как другие нет.

Меня беспокоит стоимость времени для каждой партии:
- 1-я партия вставки: N1
- 2-я партия вставки: N2
- 3-я партия вставки: N3

Вопрос в том, будут ли N1, N2 и N3 примерно одинаковыми или N3 > N2 > N1?

То есть будут ли временные затраты постоянными или инкрементными при наличии нескольких индексов?

Все индексы не кластеризованы.

Структура архивной таблицы такова:

create table document (
   doc_id   int unsigned primary key,
   owner_id int,  -- indexed
   title    smalltext,
   country  char(2),
   year     year(4),
   time     datetime,

   key ix_owner(owner_id)
}

1 ответ

Решение

Стоимость будет добавочной, O(log(n)),

На практике у вас будет шаг на графике, когда размер индекса достигнет определенного порога, и страницы индекса перестанут помещаться в кэш

Размер кеша определяется key_buffer_size в MyISAM а также innodb_buffer_pool_size в InnoDB,

До этого порога стоимость будет пропорциональна времени поиска в памяти, после порога стоимость будет пропорциональна времени поиска на диске (все умножено на log(n) конечно)

Другие вопросы по тегам