Каковы основные различия в производительности между varchar и nvarchar типами данных SQL Server?

Если вы используете NSURLConnection для захвата большого файла (скажем, 1 МБ или более), вы можете использовать делегат для отслеживания промежуточного хода загрузки.

В частности: если вы измеряете разницу в загруженных байтах и ​​разницу во времени между вызовами делегата, вы можете рассчитать текущую скорость в байтах в секунду (или другую единицу времени).

232
задан Solomon Rutzky 27 June 2018 в 12:34
поделиться

9 ответов

Всегда используйте nvarchar.

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

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

142
ответ дан Joe Barone 23 November 2019 в 03:34
поделиться

Я часто имею дело с этим вопросом на работе:

  • подача FTP материально-технических ресурсов и оценивающий - Описания изделия и другой текст были в nvarchar, когда varchar хорошо работал. Преобразование их к varchar уменьшило размер файла почти в половине и действительно помогло с загрузками.

  • вышеупомянутый сценарий хорошо работал, пока кто-то не поместил специальный символ в описание изделия (возможно, торговая марка, не может помнить)

, я все еще не использую nvarchar каждый раз по varchar. Если существует сомнение или потенциал для специальных символов, я использую nvarchar. Я нахожу, что использую varchar главным образом, когда я нахожусь в 100%-м управлении того, что заполняет поле.

4
ответ дан K Richard 23 November 2019 в 03:34
поделиться

Для этого последние несколько лет все наши проекты использовали NVARCHAR для всего, так как все эти проекты многоязычны. Импортированные данные из внешних источников (например, ASCII-файл, и т.д.) преобразовываются в Unicode прежде чем быть вставленным в базу данных.

я должен все же встретиться с любыми связанными с производительностью проблемами от больших индексов и т.д. Индексы действительно используют больше памяти, но память является дешевой.

, Используете ли Вы хранимые процедуры или создаете SQL на лету, гарантируют, что все строковые константы снабжаются префиксом N (например, Набор @foo = мир N'Hello.';), таким образом, константа является также Unicode. Это избегает любого преобразования строкового типа во времени выполнения.

YMMV.

7
ответ дан devstuff 23 November 2019 в 03:34
поделиться

Для Вашего приложения nvarchar прекрасен, потому что размер базы данных является небольшим. Высказывание "всегда использует nvarchar", значительное упрощение. Если Вы не будете обязаны хранить вещи как Кандзи или другие сумасшедшие символы, используйте VARCHAR, то оно использует намного меньше пространства. Мой предшественник в моем текущем задании разработал что-то с помощью NVARCHAR, когда это не было необходимо. Мы недавно переключили его на VARCHAR и сохранили 15 ГБ на просто, что таблица (это было высоко записано в). Кроме того, если у Вас затем есть индекс на той таблице, и Вы хотите включать тот столбец или сделать сводный индекс, Вы только что сделали свой размер индексного файла больше.

Просто быть вдумчивым в Вашем решении; в разработке SQL и определениях данных там, кажется, редко "ответ по умолчанию" (кроме, избегают курсоров любой ценой, конечно).

21
ответ дан WebMasterP 23 November 2019 в 03:34
поделиться

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

у меня не было бы надежного "всегда nvarchar" правило, потому что это может быть полными отходами во многих ситуациях - особенно ETL от ASCII/EBCDIC или идентификаторов и кодировать столбцы, которые часто являются ключами и внешними ключами.

, С другой стороны, существует много случаев столбцов, где я, несомненно, задал бы этот вопрос рано и если бы я сразу не получил надежный ответ, я сделал бы столбец nvarchar.

42
ответ дан Cade Roux 23 November 2019 в 03:34
поделиться

Будьте последовательны! ПРИСОЕДИНЕНИЮ к VARCHAR к NVARCHAR поражали большую производительность.

60
ответ дан Thomas Harlan 23 November 2019 в 03:34
поделиться

Дисковое пространство не является проблемой..., но памятью, и производительность будет. Удвойте чтения страницы, двойной индексный размер, странный КАК и = постоянное поведение и т.д.

, необходимо ли сохранить китайский язык и т.д. сценарий? Да или нет...

И от MS BOL" устройство хранения данных и Эффекты Производительности Unicode"

Редактирование :

Недавний ТАК выделение вопроса, как плохо nvarchar производительность может быть...

SQL Server использует высокий ЦП при поиске внутри nvarchar строк

225
ответ дан Community 23 November 2019 в 03:34
поделиться

Так как Ваше приложение является маленьким, нет по существу никакого заметного увеличения стоимости к использованию nvarchar по varchar, и Вы сохраняете себя потенциальные головные боли в будущем, если у Вас есть потребность хранить unicode данные.

10
ответ дан tbreffni 23 November 2019 в 03:34
поделиться

Почему во всем этом обсуждении не упоминается UTF-8? Возможность хранить полный диапазон символов Unicode не означает, что нужно всегда выделять два байта на символ (или «кодовую точку», если использовать термин UNICODE). Все ASCII - это UTF-8. Проверяет ли SQL Server для полей VARCHAR (), является ли текст строгим ASCII (т.е. нулевой бит верхнего байта)? Надеюсь, что нет.

Если вы хотите сохранить Unicode и хотите совместимость со старыми ASCII-приложениями, я бы подумал, что использование VARCHAR () и UTF-8 было бы волшебной пулей: это только при необходимости использует больше места.

Тем из вас, кто не знаком с UTF-8, могу ли я порекомендовать праймер .

3
ответ дан 23 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: