Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / alter table add 'column' и увеличение размера таблицы / 5 сообщений из 5, страница 1 из 1
06.06.2008, 13:42
    #35359293
davydoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table add 'column' и увеличение размера таблицы
Добрый день!

Я использую ASE 12.5. Есть таблица с огромным количеством строк. Нужно завести новый столбец. Стою перед выбором: либо добавить новый столбец в существующую, либо создать новую таблицу. Первая альтернатива наиболее предпочтительна с точки зрения удобства, но меня останавливает возможное существенное увеличение размера таблицы на устройствах хранения, так как для уже существующих записей, которых оргомное количество, там будет храниться null. Вопрос. Действительно ли произойдет увеличение размера таблицы или ASE настолько умный, чтобы не увеличивать размеры существующих строк, а обрабатывать старые строки особым образом, к примеру, добавляя новый столбец на лету?

Спасибо,
Виталий
...
Рейтинг: 0 / 0
06.06.2008, 18:02
    #35360380
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table add 'column' и увеличение размера таблицы
davydoff пишет:

> предпочтительна с точки зрения удобства, но меня останавливает возможное
> существенное увеличение размера таблицы на устройствах хранения, так как
> для уже существующих записей, которых оргомное количество, там будет
> храниться null. Вопрос. Действительно ли произойдет увеличение размера
> таблицы

Нет, не произойдет.

или ASE настолько умный, чтобы не увеличивать размеры
> существующих строк, а обрабатывать старые строки особым образом, к
> примеру, добавляя новый столбец на лету?

Поле добавится физически в конец списка полей переменной длины.
В каждой записи хранятся смещения полей от начала записи.
В этот массив в конец для всех существующих записей добавится
поле смещения новой колонки, которое будет совпадать со смещением
предыдущей, и будет, таким образом, обозначать пустое поле
(т.е. null). Физически записи в БД даже не будут меняться,
поменяется только заголовок таблицы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
06.06.2008, 18:35
    #35360458
davydoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table add 'column' и увеличение размера таблицы
Спасибо за ответ, MasterZiv

Я немного поэкспериментировал с alter table. И выяснил, что операция добавления нового столбца проходи очень быстро. Я полагаю, что она не затрагивает страницы с данными. Просто меняется секция с описанием таблицы (не знаю, как назвать по-другому). Действительно, при добавлении столбца необязательно менять список со смещениями для каждой строки. Зато операция удаления столбца занимает много времени. В этом случае необходимо пройти по всем строкам.


Код: plaintext
1.
2.
3.
4.
5.
6.
SQL (ASE 12.5)                        sp_spaceused (reserved column)
---------------------------------------------------------------------  
create table aaa ( a int )            16 KB 
filling with ~2.5M records            20322 KB
alter table aaa add b char(8) null    20322 KB
update aaa set b = '12345678'         56946 KB

Спасибо,
Виталий
...
Рейтинг: 0 / 0
06.06.2008, 19:14
    #35360579
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table add 'column' и увеличение размера таблицы
davydoff пишет:

> Я немного поэкспериментировал с alter table. И выяснил, что операция
> добавления нового столбца проходи очень быстро. Я полагаю, что она не
> затрагивает страницы с данными.

Если добавляются поля NULL, то да, не затрагивает.

Просто меняется секция с описанием
> таблицы (не знаю, как назвать по-другому).

Заголовок. syscolumns.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
06.06.2008, 20:18
    #35360711
rcryo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table add 'column' и увеличение размера таблицы
я бы добавил что при добавлении столбца переменной длины реальный размер столбца для например DOL таблицы будет равен длине столбца плюс 10 байт служебной информации. Я бы подумал стоит ли так делать для таблицы "с огромным количеством строк"
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / alter table add 'column' и увеличение размера таблицы / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]