Что такое попадание в хранилище только для 10 символов nvarchar (100) против nvarchar (255)? - PullRequest
0 голосов
/ 24 апреля 2018

Мне нужно сбалансировать доступное дисковое пространство с ожидаемым размером данных.Какое попадание в хранилище происходит, когда есть неиспользуемое пространство?

Пример: «собака» хранится в nvarchar (10) против nvarchar (100).Если я планирую худшее и выберу nvarchar (100) вместо nvarchar (10), сколько дополнительного дискового пространства будет потрачено впустую, если я пойду с nvarchar (100)?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Насколько я помню, и, как упоминал Зохар, разница в хранилище очень минимальная.


Вы однако увидите потенциально большое влияние на предоставление памяти запросови, следовательно, общая производительность вашего сервера.Поскольку Query Engine не знает, насколько полны эти столбцы большего размера, он пытается выделить , вероятно, достаточно памяти, предполагая много заполненных столбцов.

Для дальнейшего чтения перейдите сюда .

0 голосов
/ 24 апреля 2018

nvarchar размер хранилища составляет 2 байта на символ + 2 дополнительных байта.Максимальная длина столбца не имеет значения - размер хранилища определяется фактическими данными.

Из официальной документации :

nvarchar[(n | max)] Строковые данные Unicode переменной длины.n определяет длину строки и может принимать значение от 1 до 4000.max указывает, что максимальный размер хранилища составляет 2 ^ 30-1 символов.Максимальный размер хранилища в байтах составляет 2 ГБ. Фактический размер хранилища в байтах в два раза превышает количество введенных символов + 2 байта. Синонимами ISO для nvarchar являются разные национальные символы и разные национальные символы.

(выделение мое)

Однако, пожалуйста, не считайте эту рекомендацию использовать nvarchar(max) для всего.Так как max обрабатывается по-разному, у него есть некоторые неприятные побочные эффекты (снижение производительности).

Вообще говоря, вы должны выбрать максимальный размер столбца в соответствии с вашим предполагаемым реальным размером данных.Чтобы быть в безопасности, вы можете просто установить максимальный размер в два раза больше ожидаемого.

Если вы знаете , вы собираетесь использовать только один поддерживаемый язык ASCII, вам следуетрассмотрите возможность использования varchar вместо nvarchar, поскольку его размер хранения вдвое меньше, чем nvarchar:

varchar [(n | max)] Variable-длина, строковые данные не в Юникоде.n определяет длину строки и может принимать значение от 1 до 8000.max указывает, что максимальный размер хранилища составляет 2 ^ 31-1 байт (2 ГБ). Размер хранилища - это фактическая длина введенных данных + 2 байта. Синонимами ISO для varchar являются charvarying или Charactervarying

(опять же, выделение мое)

...