Spec-Zone.ru › MySQL 9.2

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/innodb-index-types.html

Spec-Zone.ru

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