7.5.11.2 Буферизация вставок
Нередко в программах для работы с базами данных первичный ключ является
уникальным идентификатором и новые строки вставляются в порядке
возрастания первичного ключа. Таким образом, вставки в кластеризированный
индекс не требуют проведения случайных считываний с диска.
Что же касается вторичных индексов, то они, напротив, обычно не являются
уникальными, так что вставки во вторичные индексы производятся в
относительно случайном порядке. Это приводит к выполнению большого
количества случайных дисковых операций ввода/вывода диска, если не
используется специальный механизм, применяемый в InnoDB.
Если требуется вставить запись индекса во вторичный индекс, который не
является уникальным, InnoDB проверяет, находится ли страница вторичного
индекса в буферном пуле. Если она там есть, InnoDB произведет вставку
непосредственно в страницу индекса. Но если страница индекса не найдена в
буферном пуле, InnoDB вставляет запись в специальную структуру буфера
вставок. Буфер вставок настолько мал, что полностью помещается в буферный
пул, и вставки в него могут производиться очень быстро.
Буфер вставок периодически объединяется с деревьями вторичных индексов в
базе данных. Часто, объединив несколько вставок на одной странице
индексного дерева, можно за счет этого сократить количество операций
ввода/вывода диска. Использование буфера вставки может ускорить вставку в
таблицу в 15 раз.