Ответ
SMALLINT — это целочисленный тип данных SQL, который используется для оптимизации хранения, когда диапазон возможных значений заранее известен и ограничен.
Ключевые характеристики:
- Размер: Обычно занимает 2 байта (16 бит).
- Диапазон значений:
SIGNED(со знаком): от -32 768 до 32 767UNSIGNED(без знака): от 0 до 65 535
Практическое применение:
- Статусы и коды: Коды HTTP-статусов, внутренние статусы заказа (
1-создан,2-оплачен,3-доставлен). - Небольшие числовые атрибуты: Возраст человека, рейтинг по 10-балльной шкале, количество товаров в небольшой корзине.
- Флаги и перечисления с числовым представлением.
Пример:
CREATE TABLE orders (
id INT PRIMARY KEY,
-- Статус заказа: 1-новый, 2-в обработке, 3-выполнен, 4-отменен
status_code SMALLINT UNSIGNED NOT NULL DEFAULT 1,
-- Приоритет заказа от 1 (низкий) до 5 (критический)
priority SMALLINT UNSIGNED NOT NULL DEFAULT 3,
CHECK (priority BETWEEN 1 AND 5)
);
Преимущество: Использование SMALLINT вместо INT (4 байта) экономит место на диске и в оперативной памяти, а также может ускорить обработку запросов, особенно при работе с большими таблицами и индексами.
Ответ 18+ 🔞
Давай разжую про этот ваш SMALLINT, а то некоторые думают, что это такой маленький интеллигент в базе данных.
Представь, что тебе надо хранить не астрономические суммы, а всякую ерунду вроде возраста твоей бабушки или количества бутылок пива, которые ты можешь выпить за вечер (ну, скажем, до 65 штук). Вот для этой кухонной арифметики и придумали SMALLINT. Это как взять здоровенный ящик INT на 4 байта, посмотреть на него и сказать: «Ёпта, да тут же овердохуища места!» — и запихнуть всё в аккуратную коробочку в 2 байта.
Что у него внутри:
- Места жрёт: Всего 2 байта. Не размазывай сопли.
- Сколько влезет:
- Если со знаком (
SIGNED) — от -32 768 до 32 767. Хватит, чтобы описать твой возможный счёт в покере после неудачного вечера. - Если без знака (
UNSIGNED) — от 0 до 65 535. Идеально, чтобы посчитать, сколько раз ты обещал бросить пить.
- Если со знаком (
Где это реально нужно:
- Всякие статусы: Код ответа сервера (404, 200), этап заказа («1 — создан», «2 — оплачен», «3 — потерян почтой России»).
- Небольшие цифры: Рейтинг фильма от 1 до 10, количество голов у футболиста за сезон (если только это не Месси в 2012-м).
- Флаги: Тот самый случай, когда вместо длинных строк типа
'active'или'banned'пишешь циферки. Экономия, блядь!
Смотри, как это выглядит в деле:
CREATE TABLE orders (
id INT PRIMARY KEY,
-- Статус заказа: 1-новый, 2-в обработке, 3-выполнен, 4-отменен
status_code SMALLINT UNSIGNED NOT NULL DEFAULT 1,
-- Приоритет заказа от 1 (низкий) до 5 (критический)
priority SMALLINT UNSIGNED NOT NULL DEFAULT 3,
CHECK (priority BETWEEN 1 AND 5)
);
А в чём, собственно, прикол?
Всё просто, чувак. Если ты будешь хранить количество просмотров котиков (допустим, до 50к) в обычном INT, ты просто будешь тратить в два раза больше места зря. А теперь умножь эту разницу на миллионы строк. База начнёт жрать память и тормозить, как пьяный слон на льду. SMALLINT — это про то, чтобы не быть распиздяем и брать ровно столько, сколько нужно. Экономия места, потенциально более шустрые индексы — красота, да и только. Главное — не пытайся впихнуть в него число жителей Москвы, а то будет тебе хиросима, вротберунчик.