Столбец строки индексации экономии пространства SQL в виде enum

0

У меня есть столбец с именем state, который имеет следующие значения: draft, active, published, archived. Я хочу сохранить их как VARCHAR и сопоставить их с классом Enum.

В таблице могут быть миллионы строк, и мне было интересно узнать о экономии пространства нескольких методов хранения этой информации.

Один из способов - иметь таблицу table_states с столбцами id, state и state_id в основной таблице.

Другой способ состоял бы в том, чтобы состояния хранились в главном столбце, но индексировались.

Правильно ли я понимаю, что индексированные столбцы строки внутри сохраняются аналогично первому упомянутому методу?

В данной базе данных находится MySQL, но я уверен, что этот вопрос относится и к другим базам данных.

Теги:
indexing

2 ответа

0

Порекомендовал бы использовать отдельную таблицу для состояний и использовать идентификатор tinyint для ID. Требование к пространству такое же, как и в перечислении (1 байт), но никаких ограничений, связанных с перечислением.

0

Индексирование не приводит к тому, что строки занимают меньше места. Фактически, он увеличивает объем хранилища, поскольку индекс является копией строк в сортированной структуре данных.

Вы можете использовать тип данных MySQL ENUM:

ALTER TABLE WhateverYourTableNameIs
  MODIFY state ENUM('active','archived','draft','published') NOT NULL;

Таким образом, хранение столбца занимает всего 1 байт за строку, потому что внутри строки только часть определения таблицы, и они сохраняются в каждой строке как целое число ординалов. Вы можете иметь до 255 строк перечисления в списке, и он по-прежнему занимает 1 байт за строку.

С другой стороны, ALTER TABLE требует переопределения списка ENUM каждый раз, когда вы хотите добавить новое значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню