Навигация

Поиск по Сайту

Партнеры

Самоучитель. Книги.

Статистика

    Каталог@Mail.ru - каталог ресурсов интернет

Урок 5.14: Требования столбцов MySQL к памяти

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Требования столбцов MySQL к памяти

Вот здесь начинается самое интересное. Сколько памяти нужно для того, чтобы сохранить то или иное значение? Это очень важно, потому что ошибка всего на один бит приведет к многомегабайтным потерям на большой таблице: ведь этот лишний бит появится в каждой записи. Требования к памяти для каждого из типов столбцов, поддерживаемых MySQL, перечислены ниже с сортировкой по категориям.

Типы VARCHAR, BLOB и TEXT представляют собой типы переменной длины, для которых требования к памяти зависят от фактической длины значения столбца (представлена как L в последующих таблицах). Например, столбец типа VARCHAR (10) может хранить строку с максимальной длиной в 10 символов. Фактическая требуемая память равна длине строки (L) плюс еще 1 байт, чтобы записать длину строки. Для строки abed, L равно 4, а требования к памяти равны 5 байтам.

Типы BLOB и TEXT требуют 1, 2, 3 или 4 байта, чтобы записать длину значения столбца, в зависимости от максимальной возможной длины типа, а также места под само значение (сколько понадобится). Заметим, что по причинам технического плана, на сегодняшний день в MySQL максимальная длина типов BLOB и TEXT ограничена 16 мегабайтами, хотя в будущем это ограничение, возможно, будет снято.

Если таблица включает любые столбцы переменной длины, формат записи будет также переменной длины. Обратите внимание, что когда таблица создана, MySQL может, при некоторых условиях, тихо и незаметно изменять столбец с типа переменной длины на тип фиксированной длины. Все подробности об этом процессе приведены в разделе 7. «Постепенные изменения спецификации столбца».

Размер объекта ENUM определен числом различных значений перечисления. Один байт используется для перечисления до 255 возможных значений. Два байта используются для перечисления до 65535 значений.

Размер объекта SET также определен числом различных членов набора. Если размер набора равен N, то объект занимает (N+7)/8 байт, округленный до 1, 2, 3, 4 или 8 байт в большую сторону. Тип SET может иметь максимум до 64 членов.

Таблица 5.7. Требования к памяти для чисел.

Тип столбца Для хранения надо
TINYINT 1 байт
SMALLINT 2 байта
MEDIUMINT 3 байта
INT 4 байта
INTEGER 4 байта
BIGINT 8 байта
FLOAT (X) 4, если X <= 24, или 8, если 25 <= X <= 53
FLOAT 4 байта
DOUBLE 8 байта
DOUBLE PRECISION 8 байта
REAL 8 байта
DECIMAL(M,D) М+2 байт, если D > 0, М+1 байт, если D=0 (D+2, если М < D)
NUMERIC(M,D) М+2 байт, если D > 0, М+1 байт, если D=0 (D+2, если М < D)

Таблица 5.8. Требования к памяти для даты и времени

Тип столбца Для хранения надо
DATE 3 байта
DATETIME 8 байта
TIMESTAMP 4 байта
TIME 3 байта
YEAR 1 байт
CHAR(M) М байт, 1 <= М <= 255
VARCHAR(М) L+1 байт, где L<=М и 1 <= М <= 255
TINYTEXT, TINYBLOB L+1 байт, где L < 2^8
BLOB, TEXT L+2 байт, где L < 2^16
MEDIUMBLOB, MEDIUMTEXT L+3 байт, где L < 2^24
LONGBLOB, LONGTEXT L+4 байт, где L < 2^32
ENUM ("value1", 'value2', ...) 1 или 2 байта, в зависимости от количества значений перечисления (максимум 65535 значений)
SET ("value1", 'value2', ...) 1, 2, 3, 4 или 8 байт, в зависимости от числа членов набора (максимум 64 члена)