Является ли стоимость времени постоянной при массовой вставке данных в индексированную таблицу?
Я создал архивную таблицу, в которой будут храниться данные только для выбора.
Ежедневно появится программа для переноса партии записей в архивную таблицу. Есть несколько столбцов, которые проиндексированы; в то время как другие нет.
Меня беспокоит стоимость времени для каждой партии:
- 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)
конечно)