14.6.2.3 Построение индексов с сортировкой
InnoDB выполняет массовую загрузку вместо вставки одной записи индекса за раз при создании или перестроении индексов. Этот метод создания индексов также известен как построение индексов с сортировкой. Построение индексов с сортировкой не поддерживается для пространственных индексов.
Построение индекса состоит из трех фаз. На первой фазе выполняется сканирование и генерируются записи индекса, которые добавляются в буфер сортировки. Когда буфер становится полным, записи сортируются и записываются во временный промежуточный файл. Этот процесс также называется “пробегом”.
На второй фазе, после записи одного или нескольких пробегов во временный промежуточный файл, выполняется сортировка слиянием всех записей в файле. На третьей и заключительной фазе отсортированные записи вставляются в .
До появления построения индексов с сортировкой записи индекса вставлялись в дерево B по одной записи за раз с использованием API вставки. Этот метод включал открытие курсора дерева B для поиска позиции вставки, а затем вставку записей в страницу дерева B с помощью оператора вставки. Если вставка завершалась неудачно из-за заполнения страницы, выполнялась операция вставки, которая включает открытие курсора дерева B и разделение и слияние узлов дерева B по мере необходимости, чтобы найти место для записи. Недостатками этого метода “сверху вниз” построения индекса являются затраты на поиск позиции вставки и постоянное разделение и слияние узлов дерева B.
Построение индексов с сортировкой использует подход “снизу вверх” к построению индекса. При этом подходе ссылка на правую крайнюю страницу листа хранится на всех уровнях дерева B.
Правая крайняя страница листа на необходимой глубине дерева B выделяется, а записи вставляются в соответствии с их отсортированным порядком.
После заполнения страницы листа указатель на узел добавляется к родительской странице, и для следующей вставки выделяется страница листа-потомка. Этот процесс продолжается до тех пор, пока все записи не будут вставлены, что может привести к вставкам вплоть до корневого уровня. При выделении страницы-потомка ссылка на ранее закрепленную страницу листа освобождается, и вновь выделенная страница листа становится правой крайней страницей листа и новой стандартной позицией для вставки.
Выделение места в страницах дерева B для будущего роста индекса
Чтобы выделить место для будущего роста индекса, можно использовать переменную innodb_fill_factor для резервирования процента места страницы дерева B. Например, установка innodb_fill_factor на 80 резервирует 20 процентов места в страницах дерева B во время построения индекса с сортировкой. Это значение применяется к страницам листа и не-листа дерева B. Оно не применяется к внешним страницам, используемым для TEXT или BLOB записей.
Количество зарезервированного места может не точно соответствовать заданному, поскольку значение innodb_fill_factor интерпретируется как подсказка, а не как жесткое ограничение.
Построение индексов с сортировкой и поддержка полнотекстовых индексов
Построение индексов с сортировкой поддерживается для . Ранее записи в полнотекстовый индекс вставлялись с помощью SQL.
Построение индексов с сортировкой и сжатые таблицы
Для предыдущий метод создания индекса добавлял записи как в сжатые, так и в несжатые страницы.
Когда журнал изменений (представляющий свободное место на сжатой странице) заполнялся, сжатая страница пересжималась. Если сжатие завершалось неудачно из-за нехватки места, страница разделялась.
При построении индексов с сортировкой записи добавляются только в несжатые страницы. Когда несжатая страница заполняется, она сжимается. Используется адаптивное заполнение, чтобы гарантировать, что сжатие в большинстве случаев будет успешным, но если сжатие завершится неудачно, страница разделится, и попытка сжатия будет предпринята снова. Этот процесс продолжается до тех пор, пока сжатие не будет успешным. Подробнее о сжатии страниц дерева B см. в разделе 14.9.1.5, «Как работает сжатие для таблиц InnoDB».
Построение индексов с сортировкой и регистрация отката
выключено во время построения индекса с сортировкой. Вместо этого используется для обеспечения устойчивости построения индекса к неожиданному завершению или ошибке.
Точка проверки заставляет записать все измененные страницы на диск. Во время построения индекса с сортировкой нить периодически получает сигнал для сброса для быстрого выполнения операции точки проверки.
Обычно нить очистки страниц сбрасывает измененные страницы, когда количество чистых страниц опускается ниже определенного порога.
При построении индексов с сортировкой измененные страницы сбрасываются незамедлительно для снижения накладных расходов на точки проверки и для параллелизации операций ввода-вывода и обработки ЦП.
Построение индексов с сортировкой и статистика оптимизатора
Построение индексов с сортировкой может привести к статистике, отличающейся от статистики, генерируемой предыдущим методом создания индекса. Различие в статистике, которое, как ожидается, не повлияет на производительность рабочей загрузки, обусловлено использованием другого алгоритма заполнения индекса.
© 2025 Oracle
Licensed under the GPLv2 License.