Для чего бы то ни было, целочисленный аргумент (например, INT(11)
) не имеет никакого значения для хранения или оптимизации в любом случае.Аргумент не указывает максимальную длину или максимальный диапазон значений, это только подсказка для отображения.Это сбивает с толку многих пользователей MySQL, возможно, потому что они привыкли к CHAR(11)
, указывающему максимальную длину.Не так с целыми числами.TINYINT(1)
и TINYINT(11)
и TINYINT(255)
хранятся идентично как 8-разрядное целое число и имеют одинаковый диапазон значений.
Максимальная длина адреса электронной почты составляет 320 символов.64 для локальной части, 1 для @
и 255. для домена.
Я не фанат использования VARCHAR(255)
в качестве объявления строки по умолчанию.Почему 255 правильной длины?Разве 254 не достаточно длинны, а 256 - слишком много?Ответ заключается в том, что люди считают, что длина каждой строки хранится где-то, и, ограничивая длину 255, они могут гарантировать, что длина занимает всего 1 байт.Они «оптимизировали», позволив использовать максимально длинную строку, сохраняя длину до 1 байта.
На самом деле длина поля , а не , хранится в InnoDB. смещение каждого поля в строке сохраняется (см. MySQL Internals InnoDB ).Если общая длина строки составляет 255 или менее, смещения используют 1 байт.Если общая длина строки может быть больше 255, смещения используют 2 байта.Поскольку у вас в строке несколько длинных полей, почти наверняка смещения в любом случае будут храниться в двух байтах.Вездесущее значение 255 может быть оптимизировано для некоторой другой реализации СУБД, но не для InnoDB.
Кроме того, MySQL в некоторых случаях преобразует строки в формат фиксированной длины, дополняя поля переменной длины по мере необходимости.Например, при копировании строк в буфер сортировки, или сохранении в таблице MEMORY, или подготовке буфера для набора результатов, он должен распределять память на основе максимальной длины столбцов, а не длины используемых данных наоснова.Поэтому, если вы объявляете столбцы VARCHAR намного дольше, чем когда-либо фактически используете, вы тратите впустую память в этих случаях.
Это указывает на опасность попытки слишком тонкой оптимизации для конкретного формата хранения.