Хранение пустых столбцов в конце таблицы Oracle - PullRequest
3 голосов
/ 25 марта 2012

Эта ссылка гласит, что все столбцы, которые можно обнулять, должны быть добавлены в конец таблицы базы данных для экономии места.

У меня вопрос, как я могу гарантировать, что столбец всегда добавляется в конец таблицы базы данных. Я предполагаю , что когда я CREATE TABLE .., я должен добавить все столбцы NULLABLE в конце. Но как это работает, когда я использую ALTER TABLE X ADD COLUMN ..?

Ответы [ 3 ]

6 голосов
/ 25 марта 2012

Oracle, в отличие от некоторых СУБД, не предлагает способа добавления столбца в определенной позиции в таблице; новые столбцы всегда добавляются в конце. Таким образом, вы не можете сделать ничего особенного для этого. Все, что у вас есть:

  • Обычно, если в вашей таблице есть столбцы, которые можно обнулять, вам не нужно добавлять какие-либо новые столбцы, не обнуляемые (тем более, что вам придется обновлять все существующие записи, чтобы обеспечить какое-либо значение заполнителя).
  • Это не очень вредно иметь обнуляемые столбцы в середине; все это означает, что длина (0) должна быть сохранена, а иначе - нет. Если у вас действительно есть огромное количество строк, в которых очень мало ненулевых данных, но много конечных нулей, это действительно не будет иметь существенного значения.
4 голосов
/ 25 марта 2012

В документации не сказано, что все конечные обнуляемые столбцы не занимают места. Он говорит «для конечных нулевых столбцов Oracle Database даже не хранит длину столбцов.» - мой акцент. Это означает, что для каждого столбца без каких-либо данных в нем Oracle не хранит длину столбца.

Предыдущее предложение гласит: "Для экономии места ноль в столбце хранит только длину столбца (ноль)" , т. Е. Oracle сохраняет только один байт на строку для каждого ноля.

Таким образом, вы не сэкономите место, как только добавите данные в столбец. Кроме того, даже если ваша таблица занимает около 1 м строк, вы сэкономите только 1 МБ, почти ничего. Об этом не стоит беспокоиться.

1 голос
/ 25 марта 2012

Не работает, если вы используете ALTER TABLE.Если вам абсолютно необходимо переупорядочить таблицу после ее изменения, вы можете использовать создание таблицы как выбор (CTAS), чтобы скопировать данные в другую таблицу (столбцы должны быть в правильном порядке), удалить исходную таблицу и переименовать новуютаблица к первоначальному названию таблицы впоследствии.Конечно, удаление исходной таблицы сделает недействительными все другие объекты в зависимости от вашей таблицы, так что это, вероятно, нереальный вариант.

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