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