14.6.2.1 Кластеризованные и вторичные индексы
Каждая InnoDB таблица имеет специальный индекс, называемый кластеризованным индексом, который хранит данные строк. Обычно кластеризованный индекс совпадает с первичным ключом. Для достижения наилучшей производительности запросов, вставок и других операций с базой данных важно понимать, как InnoDB использует кластеризованный индекс для оптимизации общих операций поиска и DML.
При определении
PRIMARY KEYв таблице,InnoDBиспользует его в качестве кластеризованного индекса. Для каждой таблицы должен быть определён первичный ключ. Если нет логически уникального и не являющегося NULL столбца или набора столбцов, которые можно использовать в качестве первичного ключа, добавьте столбец с автоинкрементом. Значения столбца с автоинкрементом уникальны и добавляются автоматически при вставке новых строк.Если вы не определяете
PRIMARY KEYдля таблицы,InnoDBиспользует первыйUNIQUEиндекс со всеми столбцами ключа, определёнными какNOT NULL, в качестве кластеризованного индекса.Если у таблицы нет
PRIMARY KEYили подходящегоUNIQUEиндекса,InnoDBгенерирует скрытый кластеризованный индекс, называемыйGEN_CLUST_INDEX, по синтетическому столбцу, который содержит значения ID строк. Строки упорядочиваются по идентификатору строки, которыйInnoDBназначает. Идентификатор строки — это 6-байтовое поле, которое монотонно увеличивается при вставке новых строк. Таким образом, строки, упорядоченные по идентификатору строки, физически расположены в порядке вставки.
Как кластеризованный индекс ускоряет запросы
Доступ к строке через кластеризованный индекс быстрый, потому что поиск по индексу приводит непосредственно к странице, содержащей данные строки. Если таблица большая, архитектура кластеризованного индекса часто экономит операцию ввода-вывода с диска по сравнению с организациями хранения, где данные строк хранятся на другой странице по сравнению с записями индекса.
Как вторичные индексы связаны с кластеризованным индексом
Индексы, отличные от кластеризованного индекса, известны как вторичные индексы. В InnoDB каждая запись во вторичном индексе содержит столбцы первичного ключа для строки, а также столбцы, указанные для вторичного индекса. InnoDB использует это значение первичного ключа для поиска строки в кластеризованном индексе.
Если первичный ключ длинный, вторичные индексы занимают больше места, поэтому выгодно иметь короткий первичный ключ.
Руководство по использованию InnoDB кластеризованных и вторичных индексов см. в разделе 8.3 «Оптимизация и индексы».
© 2025 Oracle
Licensed under the GPLv2 License.