powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Опять про varchar(n)
25 сообщений из 173, страница 1 из 7
Опять про varchar(n)
    #38718228
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В PostgreSQL есть тип varchar без указания длины. По производительности он быстрей чем char(n) и равен varchar(n):
http://stackoverflow.com/questions/7320316/why-specify-a-length-for-character-varying-types

Нам бы такой тоже не помешал, уже :)
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718234
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

опять лень думать какую длину указывать?

В FB такой тип есть и называется он BLOB. Производительность при работе с BLOB это уже второй вопрос. Сетевой протокол в FB 3 подкрутят (уж не знаю будут ли блобы быстрее передаваться). А вот с конкатенацией уже сложнее.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718245
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять хочется чтобы было по-человечески.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718251
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Nickdee!
You wrote on 12 августа 2014 г. 14:36:53:

Nickdee> Опять хочется чтобы было по-человечески.
понятия человечности "здесь тут" и в "там у ***" очень разные.
Модератор: Предупреждаю о вреде мата. Тем более в связи с опускающимся железным занавесом.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718253
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeхочется чтобы было по-человечески.
Звучит как "без необходимости применять мозг".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718264
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисПроизводительность при работе с BLOB это уже второй вопрос.Это делает его использование неприемлимым. Плюс отсутствие индексов по ним.

А вот как хочется:
http://www.postgresql.org/docs/9.3/static/datatype-character.html The storage requirement for a short string (up to 126 bytes) is 1 byte plus the actual string, which
includes the space padding in the case of character. Longer strings have 4 bytes of overhead instead
of 1. Long strings are compressed by the system automatically, so the physical requirement on disk
might be less. Very long values are also stored in background tables so that they do not interfere with
rapid access to shorter column values. In any case, the longest possible character string that can be
stored is about 1 GB. (The maximum value that will be allowed for n in the data type declaration
is less than that. It wouldn’t be useful to change this because with multibyte character encodings
the number of characters and bytes can be quite different. If you desire to store long strings with no
specific upper limit, use text or character varying without a length specifier, rather than making
up an arbitrary length limit.)

Tip: There is no performance difference among these three types, apart from increased storage
space when using the blank-padded type, and a few extra CPU cycles to check the length when
storing into a length-constrained column.
While character(n) has performance advantages in
some other database systems, there is no such advantage in PostgreSQL; in fact character(n)
is usually the slowest of the three because of its additional storage costs. In most situations text
or character varying should be used instead
.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718313
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeTip: There is no performance difference among these three types, apart from increased storage
space when using the blank-padded type, and a few extra CPU cycles to check the length when
storing into a length-constrained column.
Создай две таблицы:
Код: plaintext
1.
2.
create table t1( s varchar(12) );
create table t2( s varchar(126) );
commit;
- и натолкай в них побольше строковых данных с макс. длиной = 12 символов.
Далее сделай какой-нить запрос с сортировкой и натрави его сначала на t1, затем на t2 (по-нескольку раз).
Будет ли разница в произв-сти ?
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718314
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeThere is no performance difference among these three types, apart from
increased storage space when using the blank-padded type, and a few extra CPU cycles to
check the length when storing into a length-constrained column.
Маркетинговое враньё. Читать данные, уложенные на отдельных страницах по определению не
может быть так же быстро.

И, кстати, ты уже пробовал построить по нему индекс?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718333
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeхочется чтобы было по-человечески.
Звучит как "без необходимости применять мозг".

Ну допустим для ФИО я знаю что оно в 99.9999% случаев в 100 символов войдёт, GUID стопроцентно войдёт в 32.
А вот во сколько символов уложится число произвольной длины уже не знаю (я понимаю, что хранить числа эффективней в бинарном виде). Возможно хватит varchar(1000), а возможно и varchar(32000) не хватит. Но в 99.9% случаев там будут лежать числа от 1 до 100 цифр. Пользователю предложим смириться с просадкой производительности у FB при работе с длинными варчарами? Или если у него вдруг иногда будут числа под сто тыщ цифр, то предложим ему BLOB? Но тогда он бонусом получит ещё просадку, в том числе и для коротких значений. Или просто предложим ему не хранить в БД длинные числа, чтобы производительность не страдала? :)
Имхо должно быть так, чтобы на одних и тех же данных движок вёл себя одинаково, независимо от того какой там N у варчара прописан, и прописан ли.
Это будет архитектурно-правильная позиция.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718343
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

на кой тебе такие числа? Ты реально оперируешь с числами длинной 1000 цифр?
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718345
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeПользователю предложим смириться с просадкой производительности у FB при работе с длинными варчарами?В ссылке, которую вы привели разница накладных расходов между "длинными" и "короткими" varchar - три байта.
Есть пример, который демонстрирует значимость этой разницы? Окромя "если три байта умножить на миллиард - будет три гигабайта"?
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718349
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

и самое интересное как с такими числами ты будешь производить различные операции (сложение, вычитание, умножение ...). Через ХП? Не боишься просадки производительности?
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718375
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeВ PostgreSQL есть тип varchar без указания длины. По производительности он быстрей чем char(n) и равен varchar(n):
ты только забыл, что раньше его длина все же была ограничена размером страницы, который у PG был (?) фиксированный, 8к.
Вроде бы в свежих версиях уже это обошли, вопрос в том, как.
В доке по постгресу эта фигня не упоминалась, люди просто напарывались на макс длину "безразмерных строк" в 8к.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718379
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovМаркетинговое враньё. Читать данные, уложенные на отдельных страницах по определению не может быть так же быстро.
кстати, да, к сожалению, дока по PG этим страдает (см выше, и вроде есть другие штуки, которые тупо умалчиваются).
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718408
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvDimitry SibiryakovМаркетинговое враньё. Читать данные, уложенные на отдельных страницах по определению не может быть так же быстро.
кстати, да, к сожалению, дока по PG этим страдает (см выше, и вроде есть другие штуки, которые тупо умалчиваются).
In any case, the longest possible character string that can be stored is about 1 GB.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718433
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeIn any case, the longest possible character string that can be stored is
about 1 GB.
Так ты смог проиндексировать эту гигабайтную строку или нет?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718434
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeесли у него вдруг иногда будут числа под сто тыщ цифр, то предложим ему BLOB? updatable view уже вышли из моды ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
recreate view v_any_nums as select 1 x from rdb$database;
commit;
recreate table t_any_nums(id int primary key,  n varchar(20), b blob);
commit;
recreate view v_any_nums as
select id, cast( coalesce(n, b) as varchar(32760)) as x
from t_any_nums;
commit;
recreate sequence g_any_nums;
commit;

set term ^;
create or alter trigger v_any_nums_biu for v_any_nums  active
before insert or update as
begin
  if (inserting) then new.id = coalesce( new.id, gen_id(g_any_nums,1));
  if ( char_length(new.x) > 20 ) then
    update or insert into t_any_nums(id, n, b)
    values( new.id, null, new.x)
    matching(id);
  else
    update or insert into t_any_nums(id, n, b)
    values( new.id , new.x, null)
    matching(id);

end
^
set term ;^
commit;


insert into v_any_nums(x) values('1234567');
insert into v_any_nums(x) values('-1234567890123456789');
insert into v_any_nums(x) values('12345670123456789012345678906546574678565221365455477');
commit;
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718437
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql.ru рекоммендует text вместо varchar(n).
Короче потестировать нужно. Хотя постгревцы наверняка за 10 лет уже протестировали это. Хотя с другой стороны не факт, может они документации на слово верят, и втихую используют text не зная что он "на самом деле дико медленный, в чём неоднократно убеждались парни из FB-тусовки на примере использования движка FB" :)
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718458
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

а ты зачем сделал вид, что ничего не увидел ?
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718475
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

тебе Dimitry Sibiryakov правильный вопрос задаёт, проиндексируй строку размером в гигабайт и посмотри, что будет.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718483
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидNickDee,

а ты зачем сделал вид, что ничего не увидел ?
Я увидел :)
Но я с postgreSQL только вчера начал, причём с документации.
Сегодня-завтра может руки дойдут до ознакомления с тулзами и генерации тестовых данных с их помощью. А может и не дойдут так быстро.
Вот тут есть кой-какие бенчмарки: http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/ .
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718497
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Nickdee!
You wrote on 12 августа 2014 г. 16:19:30:

Nickdee> Но я с postgreSQL только вчера начал, причём с документации.
> Сегодня-завтра может руки дойдут до ознакомления с тулзами и генерации
> тестовых данных с их помощью. А может и не дойдут так быстро.
с нетерпением ждём очередных "открытий чЮдных" и фичереквестов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718527
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийHello, Nickdee!
You wrote on 12 августа 2014 г. 16:19:30:

с нетерпением ждём очередных "открытий чЮдных" и фичереквестов.


только не это. Как по мне PG свалка всяких фич. Много полезных, но часть (их довольно много) на фиг некому не сдалось, кроме разве что экспериментаторов.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718532
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeDimitry Sibiryakovпропущено...

Звучит как "без необходимости применять мозг".

Ну допустим для ФИО я знаю что оно в 99.9999% случаев в 100 символов войдёт, GUID стопроцентно войдёт в 32.
А вот во сколько символов уложится число произвольной длины уже не знаю (я понимаю, что хранить числа эффективней в бинарном виде). Возможно хватит varchar(1000), а возможно и varchar(32000) не хватит. Но в 99.9% случаев там будут лежать числа от 1 до 100 цифр.что за числа такие, по 100 цифр?

Вообще-то любая типизация данных (а задать макс. длину стринга - это тоже типизация), это в некотором роде ограничитель ошибок входных данных. Если данные - целое число, то пользователь никак не сможет ввести в БД символы. Если данные - ФИО, то попытка введения более 100 символов, очевидно будет ошибкой.
Если надо ввести *большие* числа, то разработчику надо обязательно узнать, что это за числа, и их максимальный размер. Потому что, вообще говоря, некоторые большие числа нельзя записать не то что в базу данных, но и на существующие носители.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38718536
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.что за числа такие, по 100 цифр?расстояние до Марса в миллиметрах.
...
Рейтинг: 0 / 0
25 сообщений из 173, страница 1 из 7
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Опять про varchar(n)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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