В MySQL, как мы можем сказать, кластеризован ли индекс таблицы или нет?

В MySQL, как мы можем сказать, кластеризован ли индекс таблицы или нет?

Мы можем использовать show index from table-name получить информацию об индексах таблицы. Но я не нахожу, что это показывает, является ли каждый индекс кластеризованным или некластеризованным.

Это делается для того, чтобы: если таблица в MySQL имеет какой-либо индекс, должна ли таблица иметь кластерный индекс?

1 ответ

Решение

В механизме хранения по умолчанию, InnoDB, индекс PRIMARY KEY всегда является кластеризованным индексом.

Если у вас нет PRIMARY KEY, это первый индекс UNIQUE KEY для ненулевых столбцов.

Если у вас нет PRIMARY KEY или UNIQUE KEY для ненулевых столбцов, то InnoDB имеет скрытый кластеризованный индекс. Вы не можете сделать запрос использовать этот кластерный индекс в этом случае.

См. https://dev.mysql.com/doc/refman/8.0/en/innodb-index-types.html

Если таблица не имеет PRIMARY KEY или подходящего индекса UNIQUE, InnoDB внутренне генерирует скрытый кластеризованный индекс с именем GEN_CLUST_INDEX для синтетического столбца, содержащего значения идентификатора строки. Строки упорядочены по идентификатору, который InnoDB присваивает строкам в такой таблице. Идентификатор строки представляет собой 6-байтовое поле, которое монотонно увеличивается при вставке новых строк. Таким образом, строки, упорядоченные по идентификатору строки, физически находятся в порядке вставки.

MyISAM - другой распространенный механизм хранения. MyISAM не поддерживает кластерный индекс.

Другие вопросы по тегам