Какой размер INT следует использовать для моего автоинкремента ids MySQL
В настоящее время мы используем INT (21) * для всех столбцов идентификатора автоинкремента в базе данных с более чем 30 таблицами.
Мы являемся сайтом блога и имеем таблицы, в которых хранятся участники, комментарии, сообщения в блогах и т.д.
Я уверен, что мы никогда не достигнем предела наших колонок INT (21) id и хотели бы знать:
- Если вы используете INT (21), когда я уверен, что нам это не понадобится, это пустая трата пространства.
- Если это пустая трата, то рекомендуемый размер для столбца идентификатора автоинкремента
* Не мой дизайн. Я спрашиваю об этом, потому что я рассматриваю возможность уменьшить это, чтобы сказать, INT (10).
Ответы
Ответ 1
Значение в скобках - это ширина экрана.
[It] может использоваться приложениями для отображения целочисленных значений, имеющих ширину, меньшую ширины, указанной для столбца, с помощью левого заполнения их пробелами. (То есть эта ширина присутствует в метаданных, возвращаемых с помощью наборов результатов. Используется ли она или нет до приложения.)
Ширина дисплея не ограничивает диапазон значений, которые могут быть сохранены в столбце, а также количество цифр, отображаемых для значений, имеющих ширину, превышающую ширину, указанную для столбца. Например, столбец, указанный как INT(3)
, имеет обычный диапазон INT
от -2147483648 до 2147483647, а значения за пределами диапазона, разрешенного тремя символами, отображаются с использованием более трех символов.
Заключение
INT(10)
или INT(21)
, не влияет на значения, которые могут быть сохранены. Если вы действительно беспокоитесь, тип данных можно легко изменить, чтобы быть BIGINT без каких-либо последствий, о которых я знаю. Я бы посмотрел, сколько новых записей создается за данный период (IE в месяц), и посмотрите, сколько времени потребуется, чтобы максимизировать значение INT на основе этой истории.
Ответ 2
См. здесь для ограничения каждого типа int: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
Обратите внимание, что INT(21) == INT(100000)
. Число в скобках - это то, сколько нулей добавлено к нему, если вы укажете, что поле должно быть нулевым.
В поле unsigned int
может храниться до 4294967295 записей (см. ссылку выше).
Ответ 3
Не беспокойтесь о том, чтобы занимать слишком много места, пространство дешево. Выберите тип столбца, который, как вы знаете, вы не превысите. Вы будете пинать себя, когда вы выбираете smallint, чтобы сэкономить место и столкнуться с проблемами, когда ваша база данных больше не будет содержать данные.