|
|
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
S.G.что за числа такие, по 100 цифр?Факторизацией, наверное, занимаются :-) Только вопрос: причём тут СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:53 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
roadsterрасстояние до Марса в миллиметрах. На него хватит 18-ти. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 17:20 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Да и 15 хватит с запасом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 17:42 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeВот тут есть кой-какие бенчмарки поскольку там разницы практически нет, мне это напомнило заявление сотрудника российского Оракла на Корпоративных Базах Данных лет 10 назад: - теперь заливка данных происходит в 10 раз быстрее! на что я из зала прокомментировал - "значит, до этого момента с заливкой данных было все совсем хреново". Народ поржал. Из теста по ссылке я делаю примерно аналогичный вывод - раз практически нет разницы между char, varchar и text, при разной фактической длине, то значит, реализация одинаково гове..ая. Ну или тест такой. Имеет смысл сравнить тот же тест с ФБ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:09 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Залил 10 записей в табличку с полем типа text(varchar без N). По 100 миллионов символов на запись. При create index была выдана ошибка: SQL Error: ОШИБКА: строка индекса требует байт: 1144712, при максимуме: 8191 Почему он поломался - я не знаю. Ведь можно было построить индекс по первым N символам (пусть даже по 8191, но я бы лучше задавал это N в create index), а остальные символы добывать из записи при непосредственном сравнении. Никто не хочет делать по-взрослому :) Или просто не придумали ещё... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:16 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee при максимуме: 8191 а я предупреждал. значит, "безразмерная строка" до сих пор не может превышать размер страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:18 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
по крайней мере для индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:18 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDee при максимуме: 8191 а я предупреждал. значит, "безразмерная строка" до сих пор не может превышать размер страницы. это в индексе. У нас тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:19 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitr, да, облом. причем, у нас ограничение на размер ключа в 1/4 страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:20 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDee при максимуме: 8191 а я предупреждал. значит, "безразмерная строка" до сих пор не может превышать размер страницы. Я ж туда 100М текста залил в поле. А если бы заливал туда строки по 100 символов длиной, то и данные бы хранились по-другому и индекс бы создался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:21 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, гораздо интереснее что будет если ты сначала создашь индекс, а потом попробуешь залить 100М текста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:34 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисNickDee, гораздо интереснее что будет если ты сначала создашь индекс, а потом попробуешь залить 100М текста Фигня получится. Больше 8К не зальёшь. Я ж говорю, что нужно использовать в ключе индекса только первые N символов, и нет проблем. А что будет в FB? В FB индекс для varchar(2048) создаётся, а для varchar(4096) уже нет. При пустой таблице. Если бы даже сейчас сделать в FB возможность создания индексов для полей varchar(32000) и чтобы не получался гигантский расход памяти и просадка по производительности, то будет всем профит. Можно будет спокойно для полей с неизвестным количеством символов ставить 32000. Т.е. я предлагаю чтобы N в varchar(N) не влияла на производительность и расход памяти, и не влияла на возможность создания индекса. А чтобы стала лишь ограничителем длины. А то сейчас получается что пользователь указывая N ещё и настраивает производительность, и управляет расходом памяти, причём по неизвестным ему формулам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:55 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeЕсли бы даже сейчас сделать в FB возможность создания индексов для полей varchar(32000) и чтобы не получался гигантский расход памяти и просадка по производительности, то будет всем профит. "И почему люди не летают как птицы?.." (с) Островский. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:09 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeЯ ж говорю, что нужно использовать в ключе индекса только первые N символов, и нет проблем. и выдаст твой индекс фигню. Особенно здорово будет попытаться сделать такой индекс уникальным. NickDeeА что будет в FB? В FB индекс для varchar(2048) создаётся, а для varchar(4096) уже нет. При пустой таблице. по крайней мере FB не врёт что для некого безразмерного типа вы получаете только преимущества. В доке честно сказано про максимальный размер ключа индекса. З.Ы. А то глядишь на поверку окажется, что эффективность супер типа text не такая уж хорошая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:11 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, в ДИАМС (mumps) "индексировалось" только первые 63 символа. И это было хорошо. С другой стороны, при помещении документов в большой varchar всегда можно выделить какие-то реквизиты документа, которые представляют интерес для поиска, и которые всегда меньше 63 символов. Я считаю, что индексирование строковых столбцов длиной более 50 символов вообще не имеет смысла. Даже если индексировать 63 символа, глубина такого индекса превышает 3 уже на ощутимых объемах записей, и в результате профит от такого индекса получается только при поиске на равенство. Чего при 63 символах практически не бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:43 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Hello, Kdv! You wrote on 12 августа 2014 г. 19:45:29: Kdv> Я считаю, что индексирование строковых столбцов длиной более 50 символов > вообще не имеет смысла. Даже если индексировать 63 символа, глубина > такого индекса превышает 3 уже на ощутимых объемах записей, и в > результате профит от такого индекса получается только при поиске на > равенство. Чего при 63 символах практически не бывает. иногда бывает нужно, при построении UNIQUE CONSTRAINT для "нечеловеческих" данных. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:48 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисNickDeeЯ ж говорю, что нужно использовать в ключе индекса только первые N символов, и нет проблем. и выдаст твой индекс фигню. Особенно здорово будет попытаться сделать такой индекс уникальным. Индекс выдаст всё нормально, просто если он будет не по полной строке, то для таких длинных занчений придётся лезть в данные за окончательным вердиктом (> или < или =). Уникальность - это про "=". Симонов ДенисNickDeeА что будет в FB? В FB индекс для varchar(2048) создаётся, а для varchar(4096) уже нет. При пустой таблице. по крайней мере FB не врёт что для некого безразмерного типа вы получаете только преимущества.Вопрос не в том, врёт или нет. Вопрос в том, что даже если в varchar(32000) лежит 10 символов, то ресурсы от компа часто требуются как на 32000 символа. Т.е. varchar(32000) в большинстве случаев кушает ресурсы примерно так же, как char(32000), независимо от длины строки в данных, т.е. кушает почти всегда по максимуму (на 32000). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:51 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeВопрос в том, что даже если в varchar(32000) лежит 10 символов, то ресурсы от компа часто требуются как на 32000 символа.Это вы прямо сейчас придумали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:57 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee Т.е. varchar(32000) в большинстве случаев кушает ресурсы примерно так же, как char(32000), независимо от длины строки в данных в смысле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:58 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvв смысле?при сортировках паддинг данных будет до декларированной длины поля, а не до "самой длинной непустой строки". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 20:04 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Таблоидпри сортировках паддинг данных будет до декларированной длины поля, а не до "самой длинной непустой строки".Это вопрос реализации , которая является внутренним делом SQL-сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 20:06 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Таблоидпри сортировках паддинг данных будет до декларированной длины поля я в курсе, вопрос в том, как это обходит постгрес. Вначале вычисляет макс строку, а только потом сортирует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 20:52 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDee Т.е. varchar(32000) в большинстве случаев кушает ресурсы примерно так же, как char(32000), независимо от длины строки в данных в смысле? Размеры буферов, их обнуление и заполнение данными. БД с page_size 16k. Есть табличка: Код: sql 1. , без индексов. В ней миллион записей. В каждой записи поле S = 'A'; Какой размер БД? при N = 1 он равен 58mb. при N = 32000 он равен 583mb. Т.е. одни и те же данные хранятся в БД с разной степенью эффективности. Разница в 10 раз. Т.е. на такую БД нужно в 10 раз больше оперативки чтобы свопа не было. При одних и тех же данных. Код: sql 1. execute and fetch all: Для N = 1: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Для N = 32000: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 6 гигабайт не хватило на сортировку при N=32000. Хорошо что винт SSD, а то бы это получилось не 36 секунд, а минут 5. При N=2048 на сортировку ушло 4 GB временных файлов, но фетч не прошёл, т.к. IBExpert-у не хватило памяти (он тоже зачем-то отжирает по максимуму памяти, на все N символов, не знаю уж зачем) Короче вот :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 21:17 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeselect * from T1 order by S я на курсах это объясняю, популярно. Вообще серебряной пули нет (как и полного счастья в жизни). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 21:28 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvТаблоидпри сортировках паддинг данных будет до декларированной длины поля я в курсе, вопрос в том, как это обходит постгрес. Вначале вычисляет макс строку, а только потом сортирует? А зачем вычислять макс строку? И зачем нужен паддинг? Я просто представляю себе - мне нужно взять из файла строки и посортировать... зачем мне делать их паддинг? Или при записи отсортированных строк в другой текстовый файл... Я максимум готов записать длину строки и её бинарное представление. Паддить её перед записью не готов. То же и с чтением: читать, а потом избавляться от паддинга, который был сделан предыдущим записывающим... уж лучше договориться с записывающим чтобы не паддил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 21:30 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38718668&tid=1563372]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
171ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 506ms |

| 0 / 0 |
