Если предположить, что данные одинаковы в любом случае, влияет ли максимальная длина VARCHAR на использование пространства вторичным индексом? Использует ли InnoDB записи фиксированной длины для индексов?
Предположим, что мы говорим о MySQL 5.1 с форматом таблицы InnoDB COMPRESSED и что рассматриваемое поле определено как VARCHAR с некоторой длиной, меньшей или равной 255 (так что он использует только один байт для смещения).
Вот пример использования:
У меня есть сервер с очень большой таблицей (несколько гигабайт). Одно из полей в настоящее время - VARCHAR (7). Нам нужно это немного дольше, и мы думаем о том, чтобы сделать его VARCHAR (255), но мы обеспокоены тем, что это приведет к раздуванию индекса.
Нет, innodb не полностью раскрывает поля varchar при использовании во вторичных индексах.
У Ива Трюдо есть хорошая запись в блоге пару лет назад, которая явно доказывает это, копаясь на страницах innodb с помощью инструмента восстановления innodb: http://www.bigdbahead.com/?p=150