Spec-Zone .ru
спецификации, руководства, описания, API
|
Требования хранения для табличных данных на диске зависят от нескольких факторов. Различные механизмы хранения представляют типы данных и хранят необработанные данные по-другому. Табличные данные могли бы быть сжаты, или для столбца или для всей строки, усложняя вычисление требований хранения для таблицы или столбца.
Несмотря на различия в расположении хранения на диске, внутренние API MySQL, которые передают и обмениваются информацией о строках таблицы, используют непротиворечивую структуру данных, которая применяется через все механизмы хранения.
Этот раздел включает направляющие линии и информацию для требований хранения для каждого типа данных, поддерживаемого MySQL, включая внутренний формат и размер для механизмов хранения, которые используют представление фиксированного размера для типов данных. Информация перечисляется по категориям или механизм хранения.
У внутреннего представления таблицы есть максимальный размер строки 65 535 байтов, даже если механизм хранения
способен к поддержке более крупных строк. Это число исключает BLOB
или TEXT
столбцы, которые вносят только 9 - 12 байтов к этому размеру. Для BLOB
и TEXT
данные, информация хранится
внутренне в различной области памяти чем буфер строк. Различные механизмы хранения обрабатывают выделение и
хранение этих данных по-разному согласно методу, который они используют для того, чтобы обработать
соответствующие типы. Для получения дополнительной информации см. Главу
14, Механизмы Хранения, и Раздел
E.10.4, "Пределы на Столбце таблицы граф и Размер Строки".
InnoDB
Таблицы См. Раздел 14.2.3.12.7, "Физическая Структура
Строки" для информации о требованиях хранения для InnoDB
таблицы.
NDBCLUSTER
ТаблицыNDB
таблицы используют 4-байтовое выравнивание;
все NDB
хранение данных делается в сети магазинов 4 байтов. Таким образом
значение столбца, которое обычно брало бы 15 байтов, требует 16 байтов в NDB
таблица. Например, в NDB
таблицы, TINYINT
, SMALLINT
, MEDIUMINT
, и INTEGER
(INT
) столбец вводит, каждый требует 4-байтового хранения на запись из-за
фактора выравнивания.
Каждый BIT(
столбец берет
M
)M
биты пространства памяти. Хотя человек BIT
столбец не составляет
выровненные 4 байта, NDB
резервы 4 байта (32 бита) на строку для первых 1-32 битов, необходимых для BIT
столбцы, тогда еще 4 байта для битов 33-64, и так далее.
В то время как a NULL
непосредственно не требует никакого пространства
памяти, NDB
резервные 4 байта за строку, если табличное определение содержит
какие-либо столбцы, определенные как NULL
, до 32 NULL
столбцы. (Если таблица MySQL Cluster определяется с помощью больше чем
32 NULL
столбцы 64 NULL
столбцы, тогда 8 байтов за
строку резервируются.)
Каждая таблица, используя NDB
механизм хранения требует первичного ключа; если Вы не определяете первичный ключ, "скрытый" первичный ключ создается NDB
. Этот скрытый первичный ключ использует запись 31-35 байтов за таблицу.
Можно использовать ndb_size.pl сценарий Perl, чтобы оценить NDB
требования хранения. Это соединяет с текущим MySQL (не MySQL Cluster) базу
данных и создает отчет относительно того, сколько пространства, которого потребовала бы база данных, если бы это
использовало NDB
механизм хранения. См. Раздел
17.4.23, "ndb_size.pl — Оценочная функция Требования
Размера NDBCLUSTER" для получения дополнительной информации.
Тип данных | Необходимое хранение |
---|---|
TINYINT |
1 байт |
SMALLINT |
2 байта |
MEDIUMINT |
3 байта |
INT , INTEGER |
4 байта |
BIGINT |
8 байтов |
FLOAT( |
4 байта, если 0 <= p <= 24, 8 байтов, если 25 <=
p <= 53
|
FLOAT |
4 байта |
DOUBLE [PRECISION] , REAL |
8 байтов |
DECIMAL( ,NUMERIC( |
Изменяется; см. следующее обсуждение |
BIT( |
приблизительно (M +7) Байты/8 |
Значения для DECIMAL
(и NUMERIC
) столбцы представляются, используя двоичный формат, который упаковывает
девять десятичных чисел (базируйтесь 10), цифры в четыре байта. Хранение для целых и дробных частей каждого
значения определяется отдельно. Каждое кратное число девяти цифр требует четырех байтов, и "оставшиеся" цифры требуют некоторой части
четырех байтов. Хранение, требуемое для избыточных цифр, дается следующей таблицей.
Оставшиеся Цифры | Число Байтов |
---|---|
0 | 0 |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 3 |
6 | 3 |
7 | 4 |
8 | 4 |
Для TIME
,
DATETIME
, и TIMESTAMP
столбцы, хранение, требуемое для таблиц, составленных перед MySQL
5.6.4, отличаются от таблиц, составленных от 5.6.4 на. Это происходит из-за изменения в 5.6.4, который разрешает
этим типам иметь дробную часть, которая требует от 0 до 3 байтов.
Тип данных | Хранение, Необходимое Перед MySQL 5.6.4 | Хранение, Необходимое с MySQL 5.6.4 |
---|---|---|
YEAR |
1 байт | 1 байт |
DATE |
3 байта | 3 байта |
TIME |
3 байта | 3 байта + хранение долей секунды |
DATETIME
|
8 байтов | 5 байтов + хранение долей секунды |
TIMESTAMP
|
4 байта | 4 байта + хранение долей секунды |
С MySQL 5.6.4, хранения для YEAR
и DATE
остается неизменным. Однако, TIME
, DATETIME
, и TIMESTAMP
представляются по-другому. DATETIME
упаковывается более эффективно, требуя 5 а не 8 байтов для недробной
части, и у всех трех частей есть дробная часть, которая требует от 0 до 3 байтов, в зависимости от точности
долей секунды сохраненных значений.
Точность Долей секунды | Необходимое хранение |
---|---|
0 | 0 байтов |
1, 2 | 1 байт |
3, 4 | 2 байта |
5, 6 | 3 байта |
Например, TIME(0)
,
TIME(2)
, TIME(4)
, и TIME(6)
используйте 3, 4, 5, и 6 байтов, соответственно. TIME
и TIME(0)
эквивалентны и требуют того же самого хранения.
Для получения дополнительной информации о внутреннем представлении временных значений, см.
В следующей таблице, M
представляет объявленную длину столбца в
символах для типов недвоичной строки и байтах для типов двоичной строки. L
представляет фактическую длину в байтах данного строкового значения.
Тип данных | Необходимое хранение |
---|---|
CHAR( |
M × w байты, 0
<= 255, где w число байтов, требуемых для символа
максимально-длиной в наборе символов
|
BINARY( |
M байты, 0 <= 255
|
VARCHAR( , VARBINARY( |
L + 1 байт, если значения столбцов требуют 0 – 255 байтов,
L + 2 байта, если значения могут потребовать больше чем
255 байтов
|
TINYBLOB , TINYTEXT |
L + 1 байт, где L < 28 |
BLOB , TEXT |
L + 2 байта, где L < 216 |
MEDIUMBLOB ,
MEDIUMTEXT |
L + 3 байта, где L < 224 |
LONGBLOB , LONGTEXT |
L + 4 байта, где L < 232 |
ENUM(' |
1 или 2 байта, в зависимости от числа перечислимых величин (65 535 максимумов значений) |
SET(' |
1, 2, 3, 4, или 8 байтов, в зависимости от числа элементов множества (64members максимум) |
Типы строки переменной длины сохранены, используя префикс длины плюс данные. Префикс длины требует от одного до
четырех байтов в зависимости от типа данных, и значение префикса L
(длина байта строки). Например, хранение для a MEDIUMTEXT
значение требует L
байты, чтобы сохранить значение плюс три байта,
чтобы сохранить длину значения.
Вычислить число байтов, используемых, чтобы сохранить деталь CHAR
, VARCHAR
, или TEXT
значение столбца, следует принять во внимание набор символов, используемый для того столбца и содержит ли
значение многобайтовые символы. В частности при использовании utf8
(или utf8mb4
) Набор символов Unicode, следует иметь в виду, что не все символы
используют то же самое число байтов и могут потребовать до трех (четыре) байты на символ. Для отказа хранения,
используемого для различных категорий utf8
или utf8mb4
символы, см. Раздел
10.1.10, "Поддержка Unicode".
VARCHAR
,
VARBINARY
, и BLOB
и TEXT
типы являются типами переменной длины. Для каждого требования хранения
зависят от этих факторов:
Фактическая длина значения столбца
Максимальная возможная длина столбца
Набор символов, используемый для столбца, потому что некоторые наборы символов содержат многобайтовые символы
Например, a VARCHAR(255)
столбец может содержать строку с максимальной длиной 255
символов. Предположение, что столбец использует latin1
набор символов (один байт за
символ), фактическое требуемое хранение является длиной строки (L
),
плюс один байт, чтобы записать длину строки. Для строки 'abcd'
, L
4, и требование хранения составляет пять байтов. Если тот же
самый столбец, как вместо этого объявляют, использует ucs2
двухбайтовый набор
символов, требование хранения составляет 10 байтов: длина 'abcd'
восемь байтов, и
столбец требует, чтобы два байта сохранили длины, потому что максимальная длина больше чем 255 (до 510 байтов).
Эффективное максимальное количество байтов, которые могут быть сохранены
в a VARCHAR
или VARBINARY
столбец подвергается максимальному размеру строки 65 535 байтов,
который совместно используется среди всех столбцов. Для a VARCHAR
столбец, который хранит многобайтовые символы, эффективное
максимальное количество символов, меньше. Например, utf8
символы могут потребовать до трех байтов за символ, таким образом, a VARCHAR
столбец, который использует utf8
набор
символов, как могут объявлять, является максимумом 21 844 символов. См. Раздел
E.10.4, "Пределы на Столбце таблицы граф и Размер Строки".
NDB
механизм хранения поддерживает переменные-width столбцы. Это означает это a
VARCHAR
столбец в таблице MySQL Cluster требует того же самого количества хранения, как был бы любой другой механизм
хранения, за исключением того, что такие значения составляют выровненные 4 байта. Таким образом, строка 'abcd'
сохраненный в a VARCHAR(50)
столбец используя
latin1
набор символов требует 8 байтов (а не 6 байтов для того же самого значения
столбца в a MyISAM
таблица).
TEXT
и BLOB
столбцы реализуются по-другому в NDB
механизм хранения, в чем каждая строка в a TEXT
столбец составляется из двух отдельных частей. Один из них имеет
фиксированный размер (256 байтов), и фактически сохранен в исходной таблице. Другой состоит из любых данных
сверх 256 байтов, которые хранятся в скрытой таблице. Строки в этой второй таблице всегда 2 000 байтов длиной.
Это означает что размер a TEXT
столбец 256 если size
<= 256 (где size
представляет размер строки); иначе, размер 256 + size
+ (2000 – (size
– 256) % 2000).
Размер ENUM
объект определяется числом различных перечислимых величин. Один байт
используется для перечислений с 255 возможными значениями. Два байта используются для наличия перечислений между
256 и 65 535 возможными значениями. См. Раздел 11.4.4," ENUM
Введите".
Размер a SET
объект определяется числом различных элементов множества. Если размер набора
N
, объект занимает (
байты, окруженные к 1, 2, 3, 4, или 8 байтов. A N
+7)/8SET
может иметь максимум 64 элементов. См. Раздел
11.4.5," SET
Введите".