Значение 3-х байтового числа в mysql (MEDIUMINT) - PullRequest
3 голосов
/ 21 июля 2009

Забавная вещь Я нашел много mysql. MySQL имеет 3-байтовый числовой тип - MEDIUMINT. Его диапазон от -8388608 до 8388607. Мне это кажется странным. Размер числовых типов, выбранных для лучшей производительности, я думал, данные должны быть выровнены по машинному слову или двойному слову. И если нам нужны некоторые правила ограничения для числовых диапазонов, он должен быть внешним по отношению к типу данных. Например:

CREATE TABLE ... (
  id INT RANGE(0, 500) PRIMARY KEY
)

Итак, кто-нибудь знает, почему 3 байта? Есть ли причина?

Ответы [ 3 ]

9 голосов
/ 21 июля 2009

Причина в том, что если у вас есть число, которое находится в пределах 3-х байтового диапазона, вы не тратите пространство, сохраняя его, используя 4 байта.

Когда у вас двадцать миллиардов строк, это имеет значение.

2 голосов
/ 21 июля 2009

Мы часто используем tinyint, smallint и mediumint как очень значительную экономию места. Имейте в виду, это делает ваши индексы намного меньше.

Этот эффект усиливается, когда у вас действительно маленькие таблицы объединения, например:

id1 smallint unsigned not null,
id2 mediumint unsigned not null,
primary key (id1, id2)

И тогда у вас есть сотни миллионов или миллиарды записей.

2 голосов
/ 21 июля 2009

Упомянутая вами проблема выравнивания относится в основном к данным в оперативной памяти. Ничто не заставляет MySQL использовать 3 байта для хранения этого типа при обработке.

Это может иметь небольшое преимущество в более эффективном использовании дискового кэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...