Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Varchar2 реально занимаемое место на диске / 18 сообщений из 18, страница 1 из 1
23.12.2020, 11:56
    #40030407
glorsh66
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
Сколько поле Varchar2 реально занимает место на диске?

https://stackoverflow.com/questions/20417845/what-is-the-major-difference-between-varchar2-and-char

Правильно ли я понимаю что Varchar2(4000) - это максимальное допустимое колличество символов.
И если я буду записывать строки с только одним символов то занимать они будут условно один байт?
Или даже строка с одинм символом - будет занимать 4000 байт?


Т.е. если у меня есть сеществующая таблица с Varchar2(255), я меняю на Varchar2(4000)
Смениться ли у меня реально используемое место на диске?


Как дело обстоит в постресе?
...
Рейтинг: 0 / 0
23.12.2020, 12:08
    #40030414
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
glorsh66
Как дело обстоит в постресе?
Ты там, где нужно?
...
Рейтинг: 0 / 0
23.12.2020, 12:12
    #40030416
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
glorsh66
Правильно ли я понимаю что Varchar2(4000)
RTFM Concepts: Tables and Table Clusters: Oracle Data Types
...
Рейтинг: 0 / 0
23.12.2020, 12:46
    #40030425
glorsh66
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
For each row, Oracle Database stores each value in the column as a variable-length field unless a value exceeds the maximum length, in which case the database returns an error. For example, in a single-byte character set, if you enter 10 characters for the last_name column value in a row, then the column in the row piece stores only 10 characters (10 bytes), not 25. Using VARCHAR2 reduces space consumption.

т.е. физически сколько написанно букв столько и занимает?
...
Рейтинг: 0 / 0
23.12.2020, 13:11
    #40030438
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
glorsh66
физически сколько написанно букв столько и занимает?

Нет конечно.
- не следует путать символы с байтами, размер байтовой последовательности зависит от кодировки БД и типа данных (Nvarchar2 всегда мультибайт).
- хранение осуществляется в виде, похожем на строку pascal, т.е. строка содержит префикс - размер.
- хранение null (равно как пустой строки) потребует 1 байт, если поле не последнее в физическом ордере.
- на физический размер таблицы повлияют еще 100500 факторов, начиная с размера блока (расходы на служебные структуры + pctfree) и до hwm.
...
Рейтинг: 0 / 0
23.12.2020, 13:20
    #40030442
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
glorsh66
For each row, Oracle Database stores each value in the column as a variable-length field unless a value exceeds the maximum length, in which case the database returns an error. For example, in a single-byte character set, if you enter 10 characters for the last_name column value in a row, then the column in the row piece stores only 10 characters (10 bytes), not 25. Using VARCHAR2 reduces space consumption.

т.е. физически сколько написанно букв столько и занимает?


да. плюс небольшой заголовок поля, где указан размер строки в байтах. иногда даже заголовка нет.

количество байтов зависит от кодировки. буква может несколько байт занимать.

это и чисел касается тоже. сколько значащих десятичных цифр в числе, столько и будет выделено места под хранение. +- особенности кодирования чисел в БД - байты знака и порядка числа.

тип CHAR дополняет значение пробелами до фиксированного размера. date тоже фиксированного размера, даже если время 00:00:00.
...
Рейтинг: 0 / 0
23.12.2020, 14:57
    #40030497
glorsh66
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
Но VARCHAR2 пробелами ничего не дополняет?
...
Рейтинг: 0 / 0
23.12.2020, 14:58
    #40030498
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
glorsh66
Но VARCHAR2 пробелами ничего не дополняет?
Ты документацию не понимаешь?
...
Рейтинг: 0 / 0
23.12.2020, 15:37
    #40030528
PuM256
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
Если настолько нет доверия документации - есть функция dump.
...
Рейтинг: 0 / 0
23.12.2020, 16:04
    #40030546
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
PuM256,

Описана в документации?
...
Рейтинг: 0 / 0
24.12.2020, 01:28
    #40030687
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
PuM256
Если настолько нет доверия документации - есть функция dump.


DUMP про диск ничего не знает. Это внутреннее представление значения аргумента функции, которое, в момент вызова, очевидно, находится не на диске, а в стеке.
...
Рейтинг: 0 / 0
24.12.2020, 01:43
    #40030689
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
glorsh66


Т.е. если у меня есть сеществующая таблица с Varchar2(255), я меняю на Varchar2(4000)
Смениться ли у меня реально используемое место на диске?


Нет. Существующие данные не изменятся.

Такой подход позволяет расширять типы колонок в огромных таблицах мгновенно. Либо СУБД отклоняет DDL запрос ALTER TABLE MODIFY и придётся делать более сложную миграцию.

И новые данные не будут занимать места больше чем нужно для хранения. Если строка помещалась в varchar2(255) то и в varchar2(4000) она займёт столько же места. Т.е. 255 или 4000 это скорее ограничение целостности, чем параметр физического хранения данных. СУБД просто проверяет, что длинна строки не превышает установленный предел.

С другой стороны потребитель данных должен выделять достаточно места в буфере, чтобы сохранять любые извлекаемые данные, или выделять память на лету. Так, если генератор отчёта увидит в таблице вместо колонки с типом varchar2(255), тип varchar2(4000) он скорее всего выделит в буфере почти в 4 раза больше памяти чтобы гарантированно принять любые строки, которые могут быть в таблице.
...
Рейтинг: 0 / 0
24.12.2020, 02:26
    #40030692
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
mcureenab
DUMP про диск ничего не знает. Это внутреннее представление значения аргумента функции, которое, в момент вызова, очевидно, находится не на диске, а в стеке.
Т.е., по-твоему, DUMP показывает структуру содержимого "стека"? И какая от этого польза?
...
Рейтинг: 0 / 0
24.12.2020, 09:21
    #40030710
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
Elic
mcureenab
DUMP про диск ничего не знает. Это внутреннее представление значения аргумента функции, которое, в момент вызова, очевидно, находится не на диске, а в стеке.
Т.е., по-твоему, DUMP показывает структуру содержимого "стека"? И какая от этого польза?


по теме - никакой. она даже размер заголовка поля в записи не показывает.
...
Рейтинг: 0 / 0
24.12.2020, 10:57
    #40030738
PuM256
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
mcureenab

DUMP про диск ничего не знает. Это внутреннее представление значения аргумента функции, которое, в момент вызова, очевидно, находится не на диске, а в стеке.

Можно пример, когда данные на диске отличаются от "внутреннего представления значения аргумента функции"?
...
Рейтинг: 0 / 0
24.12.2020, 12:58
    #40030774
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
PuM256,

имхо
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> ed
Wrote file afiedt.buf

  1* select dump('abc') d from dual
SQL> /

D
----------------------
Typ=96 Len=3: 97,98,99



на диске может быть в обратном порядке cba

.....
stax
...
Рейтинг: 0 / 0
25.12.2020, 08:53
    #40031032
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
Не может
...
Рейтинг: 0 / 0
25.12.2020, 09:47
    #40031040
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Varchar2 реально занимаемое место на диске
Вячеслав Любомудров
Не может


REVERSE индекс может.

а ещё сжатие есть...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Varchar2 реально занимаемое место на диске / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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