Подтвердить что ты не робот

Понимание MySQL key_len в объяснении

Согласно веб-сайт MySQL, столбец key_len указывает длину ключа, который MySQL решил использовать. Длина NULL, если в столбце ключа указано NULL. Обратите внимание, что значение key_len позволяет определить, сколько частей ключевого слова с несколькими частями MySQL фактически использует.

Используя пример из моего предыдущего вопроса, у меня есть оператор EXPLAIN SELECT, который показывает MySQL с помощью Index с key_len: 6. Ниже показан состав используемого индекса и столбцов.

`Type` char(1) NOT NULL,
`tn` char(1) NOT NULL DEFAULT 'l',
`act` tinyint(1) unsigned NOT NULL DEFAULT '0',
`flA` mediumint(6) unsigned NOT NULL DEFAULT '0',
KEY `Index` (`Type`, `tn`, `act`, `flA`)

Итак, как значение key_len позволяет мне определить, что мой запрос использует первые три части ключа с несколькими частями?

4b9b3361

Ответ 1

Key_len указывает количество байтов, которое MySQL использует из ключа.
Индексы всегда используются left_to_right. т.е. используется только самая левая часть.

Длина ваших полей следующая:

1 byte             `Type` char(1) NOT NULL,
1 byte             tn char(1) NOT NULL DEFAULT 'l',
1 byte             act tinyint(1) unsigned NOT NULL DEFAULT '0',
3 bytes            flA mediumint(6) unsigned NOT NULL DEFAULT '0',
1+1+1+3 = 6 bytes  KEY `Index` (`Type`, `tn`, `act`, `flA`)
 key usage always starts here ---^^^^^

Если key_len = 3, то он использует type+tn+act.
Обратите внимание, что Key_len = 4 невозможно в этой конфигурации.