Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 varchar2(какую длину указать)  [new]
Max Pro
Member

Откуда: планета Сатурн, межгалактическая станция №999
Сообщений: 2776
При создании таблицы можно указать Varchar2(2000) или Varchar2(4000). Предполагается, что строки влезут в обоих случаях.

Вопрос: если я укажу 2000 вместо 4000, то добьюсь ли я этим какой-либо ощутимой (более 1%):
1. экономии места на диске?
2. ускорения отработки запросов?

Если нет, то можно ли рассматривать сокращение длины с 4000 на меньшее значение дополнительным констрейном?

Интересует версия Оракла 10 или 11.
22 июн 12, 18:37    [12762515]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
Edward Shevtsov
Member

Откуда: Moscow
Сообщений: 13469
Max Pro,

1, 2 - нет
3 - эээ можно)
22 июн 12, 18:40    [12762521]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
Max Pro
Member

Откуда: планета Сатурн, межгалактическая станция №999
Сообщений: 2776
Edward Shevtsov
Max Pro,

1, 2 - нет
3 - эээ можно)

Спасибо за быстрый ответ. Я так и думал, но не был уверен. А ты это точно знаешь, а то я тут с товарищем поспорил, он утверждает обратное (поэтому экономит длину и потом имеет геморрой когда юзера ругаются, что не влезает текст). В документации это где-то есть или ты опытным путём выяснил?
22 июн 12, 18:46    [12762537]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
Edward Shevtsov
Member

Откуда: Moscow
Сообщений: 13469
Max Pro
Edward Shevtsov
Max Pro,

1, 2 - нет
3 - эээ можно)

Спасибо за быстрый ответ. Я так и думал, но не был уверен. А ты это точно знаешь, а то я тут с товарищем поспорил, он утверждает обратное (поэтому экономит длину и потом имеет геморрой когда юзера ругаются, что не влезает текст). В документации это где-то есть или ты опытным путём выяснил?
интуиция )))
22 июн 12, 18:53    [12762558]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
Пробегал мимо
Guest
Еще при выполнении запроса типа select big_column from table и вывода результатов в какую нибудь гуевую табличку на клиент большинство средств создания энтого самого клиента по умолчанию сделают ширину колонки такой чтоб поместилось 4000 символов, и пользователи будут счастливы прокручивать по горизонтали стопицот колонок какого нибудь справочника
22 июн 12, 19:31    [12762646]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Max Pro
В документации это где-то есть или ты опытным путём выяснил?
10588838
22 июн 12, 19:46    [12762670]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Стоит узнать про rows chaining and migration
22 июн 12, 19:53    [12762691]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Max Pro
При создании таблицы можно указать Varchar2(2000) или Varchar2(4000). Предполагается, что строки влезут в обоих случаях.

Вопрос: если я укажу 2000 вместо 4000, то добьюсь ли я этим какой-либо ощутимой (более 1%):
1. экономии места на диске?
2. ускорения отработки запросов?

Если нет, то можно ли рассматривать сокращение длины с 4000 на меньшее значение дополнительным констрейном?

Интересует версия Оракла 10 или 11.

вообще, длину надо указывать такую, какую надо и в тех единицах, в каких надо.
экономии места вы не достигните, но не ей одной (имхо) стОит руководствоваться.
например, сделали столбец 4000 байт, всегда найдётся дятел, который его заполнит до упора - дальше попробуйте
в запросе сконкатенировать его с чем-либо..
22 июн 12, 20:12    [12762728]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
xtender
Стоит узнать про rows chaining and migration
Что даст это знание в контексте занимаемого места 2000 vs 4000?
orawish
всегда найдётся дятел, который его заполнит до упора
Как нежно вы о пользователях. :-)
22 июн 12, 20:23    [12762751]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
miksoft
Member

Откуда:
Сообщений: 38544
Пробегал мимо
Еще при выполнении запроса типа select big_column from table и вывода результатов в какую нибудь гуевую табличку на клиент большинство средств создания энтого самого клиента по умолчанию сделают ширину колонки такой чтоб поместилось 4000 символов, и пользователи будут счастливы прокручивать по горизонтали стопицот колонок какого нибудь справочника
Попутно снова не премину напомнить, что некоторые клиентские библиотеки/компоненты доступа выделяют память под набор данных по словарной длине, а не по фактической.
22 июн 12, 20:29    [12762771]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
dbms_photoshop,

непонятна связь общей длины строки, размера блока и количества chained rows?
22 июн 12, 21:03    [12762864]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
xtender
непонятна связь общей длины строки, размера блока и количества chained rows?


Row Chaining and Migrating
In two circumstances, the data for a row in a table may be too large to fit into a single data block. In the first case, the row is too large to fit into one data block when it is first inserted. In this case, Oracle stores the data for the row in a chain of data blocks (one or more) reserved for that segment.


SY.

Сообщение было отредактировано: 22 июн 12, 22:07
22 июн 12, 22:06    [12763002]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Oops,

Упустил: "Предполагается, что строки влезут в обоих случаях".

SY.
22 июн 12, 22:09    [12763005]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
Max Pro
Member

Откуда: планета Сатурн, межгалактическая станция №999
Сообщений: 2776
dbms_photoshop
Max Pro
В документации это где-то есть или ты опытным путём выяснил?
10588838

Ну я изучил эту ссылку. В поисках ссылки на документацию, мне пришлось прочитать множество веток форума sql.ru.

1. Реальный размер данных в таблицах (https://www.sql.ru/forum/actualthread.aspx?tid=847533&pg=1&mid=10588838#10588838 )

Эта ветка дала две ссылки, одну на запароленный ресурс Оракла, видимо форум ихний какой-то. Туда я попасть не смог, так как пароля нету, а регистрироваться из-за кем-то брошенных пары фраз не хотелось. Вторая ссылка вела на другую тему sql.ru:

2. почему varchar2 объявляют размером 255 байт (https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=771225&pg=3 )

Тема конечно интересная, хотя не по моей части, но прочитал всё. Там была цитата, в переводе на русский, Оракл 8 и 9 хранит заголовок поля в 1 байте если в нём содержится по факту не более 250 байт, или в 3-х байтах, если более 250 байт. Но на декларацию длины поля это не влияет. Также там написали, что Дельфи хранит строки более 255 симфолов в типе Memo, а это плохо. Но кто сейчас на Дельфи пишет? Он умер давно вместе с Борландом.

Ещё там привели код pl, иллюстрирующий, что выделение памяти, видимо оперативной, зависит от длины декларации, но только для 9-й версии. Начиная с 10-й, уже разницы нет.

Далее вспомнили 5-ю версию Оракла: Максимальная длина символьной строки в колонке
задается при создании таблицы, но не может превосходить 240 сим-
волов.

И 6-ю версию: Максимальное число символов, которое можно запоминать в столб-
цах, определенных как CHAR и VARCHAR, равно 255.

Кончился топиг тем, что выделение памяти исследовал пользователь "-2-", который сделал вывод о аппаратной зависимости, но в целом память выделяется по мере необходимости по факту.

3. Почему VARCHAR2(254) (https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=359485&hl=250#7387537 )

Это заключительная тема, на которую была ссылка. В этой теме в свою очередь есть ссылка на документацию Оракла.

http://docs.oracle.com/cd/B10501_01/server.920/a96524/c11schem.htm#6964

В принципе, я у вас в этом топике и спрашивал такую вот ссылку, прямую, на Оракл прямо. Однако, в этой документации хотя и есть неявный ответ на вопрос об отсутствии экономии места на диске при определении предела Varchar2(2000) или Varchar2(4000), но вот насчёт быстродействия запросов - ничего нет.
25 июн 12, 15:45    [12771488]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Max Pro,

как я уже писал, прочитайте "Row Chaining and Migrating", SY уже привел часть оттуда, правда, зачем-то мне...
25 июн 12, 15:56    [12771590]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Max Pro,

не упорствуйте в заблуждениях.
от лимитов надо (зубами ) держаться подальше.
Присоединен к:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options

SQL>
SQL> create table tab1
  2  (a1 varchar2(4000)
  3  ,a2 varchar2(4000)
  4  );

Таблица создана.

SQL> create index itab1_32 on tab1(a1,a2);
create index itab1_32 on tab1(a1,a2)
                         *
ошибка в строке 1:
ORA-01450: превышена максимальная длина (6398) ключа
25 июн 12, 16:24    [12771824]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
orawish,

ага, и по этой же теме с rebuild online: http://jonathanlewis.wordpress.com/2009/06/05/online-rebuild/
25 июн 12, 16:41    [12771953]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
Max Pro, коллега,

Какой у вас будут строки менее 2000 символов или от 2000 до 4000 символов?
Непонятна причина вопроса. Ставь длину которая будет использоваться на самом деле.

Реальная длина строки конечно же влияет на размер данных и на производительность запросов.
varchar2, хранит именно такую строку, которую внесли, в отличие от char, который забивает пробелами оставшийся кусок.
25 июн 12, 16:41    [12771959]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
xtender
Max Pro,

как я уже писал, прочитайте "Row Chaining and Migrating", SY уже привел часть оттуда, правда, зачем-то мне...

И зачем ему это читать?
25 июн 12, 16:42    [12771962]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
брадобрей,

потому что надо рассматривать в целом и таблицу и размер блока, а не сферически просто 2000 и 4000 - одно дело размер блока 2k другое - 16k, одно дело - только вставки, другое - еще и апдейты на большую длину и тд и тп.
25 июн 12, 17:07    [12772144]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
xtender
брадобрей,

потому что надо рассматривать в целом и таблицу и размер блока, а не сферически просто 2000 и 4000 - одно дело размер блока 2k другое - 16k, одно дело - только вставки, другое - еще и апдейты на большую длину и тд и тп.

И всё таки не понятно, какое значение тут имеют chained & migrated rows?
Какую длину ограничения он выберет не важно, важно какой длины у него будут настоящие строки.

Предположим они у него менее 2000 и он выбрал 2000. Это абсолютно не отменяет chained & migrated rows.
Предположим они у него менее 2000 и он выбрал 4000. Абсолютно то же, что и выше.
Предположим они у него более 2000 и он выбрал 4000, а при 2000 у него бы не было chained & migrated rows. Что ж он пойдет бизнес переделывать, чтобы они не вносили длинных строк?
25 июн 12, 17:16    [12772200]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
брадобрей
Что ж он пойдет бизнес переделывать, чтобы они не вносили длинных строк?
Судя по 12762537 переделывают
ну а в целом может им вообще в 99.999% это поле не нужно и его можно вынести в другую таблицу в другом тс...
25 июн 12, 17:24    [12772292]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
брадобрей
Это абсолютно не отменяет chained & migrated rows
может тейтблспейс другой выберет
25 июн 12, 17:26    [12772307]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
xtender
брадобрей
Это абсолютно не отменяет chained & migrated rows
может тейтблспейс другой выберет
Это зависит от длины строк, а не размера ограничения
25 июн 12, 17:27    [12772319]     Ответить | Цитировать Сообщить модератору
 Re: varchar2(какую длину указать)  [new]
Max Pro
Member

Откуда: планета Сатурн, межгалактическая станция №999
Сообщений: 2776
Спасибо за ответы.
2 брадобрей,xtender:
Бизнес не переделывают, но стабильно пару раз в году увеличивают длину Varchar2 на немножко (на 5...10 букв). Я когда узнал, подивился жадности человека. Он в свою очередь удивлялся моему удивлению. Ладно, хрен с ним, пускай в прошлом веке живёт. На ЕС ЭВМ тогда байты экономили.
2 orawish:
Я длинные строки не индексирую. Вместо этого для сортировки использую иные пути. Стараюсь индексировать поля длиной не более 16 байт, если это возможно.
25 июн 12, 19:10    [12772865]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить