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