Влияние скорости использования varchar в SQL Server 2008


9

В старые времена использование varcharover charбыло большим «нет», так как varcharон хранился на другой странице, чем остальная часть строки. Так ли это до сих пор в SQL Server 2008? Увижу ли я какой-либо выигрыш в памяти / производительности от замены 1-3 varchar(5)столбцов на char(5)столбцы таблицы с

а) скажем 2.000.000 строк б) если какой-либо из varcharстолбцов является частью индексов / первичных ключей


2
Возможный дубликат вопроса Как слишком длинные поля (varchar / nvarchar) влияют на производительность и использование диска? (MSSQL Server 2008) . Если вы думаете, что это не дубликат, то, безусловно, вы найдете там и ответы.
Marian

Ответы:


8

Вы путаете text / varchar (max) (типы больших объектов) с varchar (n) / char (n)

В противном случае, если вы используете char (1000), а не varchar (1000), а средняя длина данных составляет, скажем, 42, это плохой дизайн и много потерянного пространства.


в DB2 и некоторых других механизмах БД char и varchar хранились по-разному, а некоторые рекомендации для DB2 были перенесены на SQL Server.
Эндрю Бикертон

@ Эндрю Бикертон: еще один миф ...
gbn

Вы можете указать мне, где этот миф был развенчан? (Я согласен, что этот совет не относится к SQL Server)
Эндрю Бикертон,

Я также ссылаюсь на одну из оригинальных версий DB2 (вероятно, так не было в последние 10 лет), аналогично совету с SQL 2000, что PK должны быть некластеризованными из-за проблем с производительностью, которые все еще существуют, хотя больше не быть правдой
Эндрю Бикертон

@ Эндрю Бикертон: просто посмотрите на структуры диска SQL Server (несколько ответов SO от меня) stackoverflow.com/search?q=user%3A27535+anatomy . Извините за поздний ответ
gbn

3

Трудно сказать вам о конкретных приростах производительности или хитов, не зная больше о вашей схеме, но в целом вы хотите определить тип данных, чтобы соответствовать вашим данным. Если вам нужна фиксированная ширина (например, вы знаете, что у вас всегда будет пять символов), тогда вам следует использовать char (5). Если у вас есть переменное количество данных, вы должны использовать varchar (5).

Для SQL, чем больше данных вы можете разместить на странице, тем выше ваша производительность.


3

Насколько я знаю, SQL Server никогда не сохранял типы данных varchar или nvarchar вне строки. Текст и NText разные. Есть несколько дополнительных битов, которые хранятся для столбца переменной ширины, но это все.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.