Postgresql character types: char, varchar, and text

В чем разница между Char и Varchar?

• Хотя char и varchar являются полями символьных данных, char — это поле данных фиксированной длины, а varchar — поле данных переменного размера.

• Char может хранить только строковые символы фиксированного размера, отличные от Unicode, но varchar может хранить строки переменных размеров.

• Char лучше, чем varchar, для данных, которые часто меняются. Это связано с тем, что строка данных фиксированной длины не подвержена фрагментации.

• Char будет занимать только фиксированное пространство, определенное при объявлении переменной. Но varchar будет занимать пространство в зависимости от вставленных данных, а также будет занимать 1 или 2 байта в качестве префикса длины.

• Если данные меньше 255 символов, выделяется 1 байт, а если данные больше 255 символов, зарезервированы 2 байта. Если мы используем char для хранения флага «Y» и «N», он будет использовать один байт для хранения, но когда мы используем varchar, для хранения флага потребуется два байта, включая дополнительный байт в качестве префикса длины.

Резюме:

Сравнение хранения LOB в строке (In-Row) и вне строки (Out-of-Row)

CREATE TABLE demo.OneColVarcharMaxIn  (Col1 VARCHAR(MAX));
CREATE TABLE demo.OneColVarcharMaxOut (Col1 VARCHAR(MAX)); 
EXEC sp_tableoption 'demo.OneColVarcharMaxOut', 'large value types out of row', 1; 

1 символ

TableName AllocUnitTp PgCt AvgPgSpcUsed RcdCt MinRcdSz MaxRcdSz FwdRcdCt
OneColVarcharMaxIn IN_ROW_DATA 1 0.15 1 12 12
OneColVarcharMaxOut IN_ROW_DATA 1 0.33 1 27 27
OneColVarcharMaxOut LOB_DATA 1 1.04 1 84 84 NULL

8000 символов

TableName AllocUnitTp PgCt AvgPgSpcUsed RcdCt MinRcdSz MaxRcdSz FwdRcdCt
OneColVarcharMaxIn IN_ROW_DATA 1 98.97 1 8011 8011
OneColVarcharMaxOut IN_ROW_DATA 1 0.33 1 27 27
OneColVarcharMaxOut LOB_DATA 2 50.02 2 84 8014 NULL

8001 символов

TableName AllocUnitTp PgCt AvgPgSpcUsed RcdCt MinRcdSz MaxRcdSz FwdRcdCt
OneColVarcharMaxIn IN_ROW_DATA 1 0.43 1 35 35
OneColVarcharMaxIn LOB_DATA 1 99.02 126 8015 8015 NULL
OneColVarcharMaxOut IN_ROW_DATA 1 0.33 1 27 27
OneColVarcharMaxOut LOB_DATA 2 98.43 127 84 8015 NULL

1000000 символов

TableName AllocUnitTp PgCt AvgPgSpcUsed RcdCt MinRcdSz MaxRcdSz FwdRcdCt
OneColVarcharMaxIn IN_ROW_DATA 1 0.43 1 35 35
OneColVarcharMaxIn LOB_DATA 126 98.42 126 2020 8054 NULL
OneColVarcharMaxOut IN_ROW_DATA 1 0.33 1 27 27
OneColVarcharMaxOut LOB_DATA 126 98.43 127 84 8054 NULL

Что такое Чар?

По определению ISO символа char персонаж и тип данных char привык кхранить персонажа. Char (n) может хранить n символов фиксированного размера. Максимальное количество символов, которое может содержать char (n), составляет 255 символов, а длина строки должна иметь значение от 1 до 8000. Char на пятьдесят процентов быстрее, чем varchar, и, следовательно, мы можем получить лучшую производительность, работая с char. Char использует статическое распределение памяти при хранении данных. Когда мы хотим хранить строки с известной фиксированной длиной, лучше использовать char. Например, при сохранении «Да» и «Нет» как «Y» и «N» мы можем использовать тип данных char. А также при сохранении номера национального удостоверения личности, состоящего из десяти символов, мы можем использовать тип данных как char (10).

Выводы

  • Где это подходит, используете VARCHAR(n), а не VARCHAR(MAX)
    • даже если нет прироста производительности, в целях хорошего проектирования и
    • поскольку данные VARCHAR(MAX) не сжимаются.
  • Сохранение больших строк занимает больше времени, чем небольших.
  • Обновление значения VARCHAR(MAX) (in row) от значения ниже 8000 к значению свыше 8000 будет относительно медленным, хотя разница для отдельной транзакции не будет заметной.
  • Обновление in-row значения VARCHAR(MAX) от значения свыше 8000 к значению ниже 8000 будет быстрей, чем если бы таблица была установлена на сохранение данных out-of-row.
  • Использование опции out-of-row для VARCHAR(MAX) будет замедлять запись, пока строки не очень длинны.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: