Является ли стоимость времени постоянной при массовой вставке данных в индексированную таблицу? - PullRequest
2 голосов
/ 19 марта 2010

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

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

Меня беспокоит стоимость времени для каждой партии:
- 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 Ответ

2 голосов
/ 19 марта 2010

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

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

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

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

...