Spec-Zone.ru › MySQL 5.7

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

Spec-Zone.ru

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