Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
30.10.2020, 01:56
|
|||
---|---|---|---|
character types: невнятная справка... |
|||
#18+
https://www.postgresql.org/docs/current/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... 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.Непонятно следующее: 1 ) 126 байт включительно или невключительно ? 2 ) требуется 1 байт дополнительной памяти для любых строк с типом varchar(N) / char(N), где N до 126 или для строк типа char(N) / varchar(N) / text с фактической длиной до 126 байт ? 3 ) " because of its additional storage costs " - это касается только тех строк типа char(N) , длина которых меньше N (имеет место дополнение пробелами) или касается любых строк типа char(N) (даже если все строки в столбце будут иметь длину N ) ? https://www.postgresql.org/docs/current/datatype-binary.html bytea = 1 or 4 bytes plus the actual binary string = variable-length binary string 4 ) В каких случаях 1 байт, в каких 4 байта ? Судя по тому, что для типа bytea длину указать нельзя, имеется в виду фактическая длина байтовой строки... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.10.2020, 02:35
|
|||
---|---|---|---|
character types: невнятная справка... |
|||
#18+
Cyrax_02, 1) заголовок строки добавляется (не включительно): в случае 10-байтовой строки будет 11 байт 2) речь о фактическом размере строки, а не об ограничении (CONSTRAINT) максимальной длины значения в колонке 3) возможно речь о том, что CHAR(N) добивается пробелами до заданной длины. у меня сомнения насчёт корректности этого утверждения, надо лезть в код. все 3 типа обслуживаются одинаковыми ф-циями, поэтому и сомнения 4) аналогично, заголовок зависит от длины фактического значения в байтах ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.10.2020, 11:02
|
|||
---|---|---|---|
character types: невнятная справка... |
|||
#18+
Cyrax_02 1 ) 126 байт включительно или невключительно ? https://github.com/postgres/postgres/blob/REL_11_STABLE/src/include/postgres.h#L270 Включительно, но кроме строк нулевой длины. Для них однобайтовый заголовок неприменим. Cyrax_02 2 ) требуется 1 байт дополнительной памяти для любых строк с типом varchar(N) / char(N), где N до 126 или для строк типа char(N) / varchar(N) / text с фактической длиной до 126 байт ? Неверно оба. Достаточно короткого заголовка для хранения varchar / text с фактической длиной по 126 байт или для char(N) где N <= 126 Cyrax_02 3 ) " because of its additional storage costs " - это касается только тех строк типа char(N) , длина которых меньше N (имеет место дополнение пробелами) или касается любых строк типа char(N) (даже если все строки в столбце будут иметь длину N ) ? Здесь речь о необходимости дополнения пробелами до N и их хранении. Cyrax_02 4 ) В каких случаях 1 байт, в каких 4 байта ? Те самые 126 байт фактической длины строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.10.2020, 14:56
|
|||
---|---|---|---|
character types: невнятная справка... |
|||
#18+
MelkijДостаточно короткого заголовка для хранения varchar / text с фактической длиной по 126 байт или для char(N) где N <= 126Так будет правильнее: Достаточно короткого заголовка для хранения varchar / varchar(N) / text с фактической длиной <= 126 байт или для char(N) где N <= 126 vyegorov3) возможно речь о том, что CHAR(N) добивается пробелами до заданной длины.MelkijЗдесь речь о необходимости дополнения пробелами до N и их хранении.Т.е. в случае, когда в поле сохраняются только строки длиной N, то в этом случае: 1 ) тип char(N) работать медленнее varchar(N) не будет (по основаниям, указанным в справке) ? 2 ) тип char(N) будет работать чуть быстрее, чем varchar(N) , за счёт отсутствия проверки длины строки ? 3 ) тип char(N) будет работать не быстрее и не медленнее, чем varchar ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.10.2020, 15:22
|
|||
---|---|---|---|
character types: невнятная справка... |
|||
#18+
Cyrax_02 1 ) тип char(N) работать медленнее varchar(N) не будет (по основаниям, указанным в справке) ? Нет. Cyrax_02 2 ) тип char(N) будет работать чуть быстрее, чем varchar(N) , за счёт отсутствия проверки длины строки ? Нет. input функция - куда деть проверку длины? И добивание пробелами? Здесь они. output - без разницы. Функции разные, код одинаковый Операции над char(N), например, сравнение - обязаны выполняться без учёта концевых пробелов, а оттого добавляем обработку rtrim (bcTruelen там же) там где её нет для других типов данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.10.2020, 11:12
|
|||
---|---|---|---|
character types: невнятная справка... |
|||
#18+
Melkijсравнение - обязаны выполняться без учёта концевых пробелов, а оттого добавляем обработку rtrimНу да. Получается, char действительно, почти никогда и не нужен (как и написано в справке). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.11.2020, 20:18
|
|||
---|---|---|---|
character types: невнятная справка... |
|||
#18+
MelkijТе самые 126 байт фактической длины строки.Что-то не сходится. pg_column_size показывает " всегда 4 байта + длина строки " Код: sql 1. 2. 3. 4. 5. 6.
Т.е. на длину короткой строки выделяется 4 байта, а не 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.11.2020, 20:46
|
|||
---|---|---|---|
|
|||
character types: невнятная справка... |
|||
#18+
Cyrax_02, все сходится вы неверно тестируете Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
varlenght prefix только для on-disk storage используется но не для in-memory representation и этого в том числе касается текст из документации к функции " If applied directly to a table column value, this reflects any compression that was done." -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1994365]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 125ms |
0 / 0 |