Spec-Zone.ru › MySQL 8.4

17.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-дерева находится в разделе 17.9.1.5 «Как работает сжатие для таблиц InnoDB».

Построение индексов с сортировкой и протоколирование с повтором

выключается во время построения индекса с сортировкой. Вместо этого есть для обеспечения того, что построение индекса может выдержать неожиданный выход или сбой. Точка проверки принудительно записывает все грязные страницы на диск. Во время построения индекса с сортировкой потоку периодически посылается сигнал для сброса для того, чтобы операция проверки точки была обработана быстро. Обычно поток очистки страниц сбрасывает грязные страницы, когда количество чистых страниц падает ниже заданного порога. При построении индексов с сортировкой грязные страницы сбрасываются незамедлительно для уменьшения накладных расходов при проверке точки и для параллелизации операций ввода-вывода и обработки ЦП.

Построение индексов с сортировкой и статистические данные оптимизатора

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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/sorted-index-builds.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API