char vs varchar vs varchar(8000) vas varchar(max)

blest
Дата: 29.01.2013 13:29:14
На основе прочитанного материала остались следующие вопросы - будут ли различия в производительности и занимаемом пространстве на диске в следующих ситуациях:
1) char(50) vs varchar(50) при условии, что 90% данных будут до 50 символов
2) varchar(500) vs varchar(8000) при условии, что 100% данных будут до 500 символов
3) varchar(8000) vs varchar(max) при условии, что 100% данных будут до 8000 символов (не затрагивая ограничения varchar(max) на индексы и некоторые операторы)
Glory
Дата: 29.01.2013 13:33:39
blest
что 90% данных будут до 50 символов

"до" означаете от 0 до 50 ?
blest
Дата: 29.01.2013 13:34:55
Glory
blest
что 90% данных будут до 50 символов

"до" означаете от 0 до 50 ?


Извиняюсь, я имел ввиду 90% данных будут ровно 50 символов
Гавриленко Сергей Алексеевич
Дата: 29.01.2013 13:36:07
Однозначно:
1. varchar(50)
2. varchar(500)
3. varchar(8000)
смотрю_тут
Дата: 29.01.2013 13:36:33
BOL
char [ ( n ) ]
Символьные данные фиксированной длины, не в Юникоде, с длиной n байт. Значение n должно находиться в интервале от 1 до 8000. Размер хранения данных этого типа равен n

varchar [ ( n | max ) ]
Символьные данные переменной длины, не в Юникоде. n может иметь значение от 1 до 8 000. max означает, что максимальный размер хранения равен 2^31-1 байт. Размер хранения равен фактической длине данных плюс два байта. Введенные данные могут иметь длину 0 символов. .
параметр ДО так же расплывчив
Glory
Дата: 29.01.2013 13:44:58
blest
Извиняюсь, я имел ввиду 90% данных будут ровно 50 символов

А остальные 10% будут 49 символов ? 48 ? 1 ?

blest
2) varchar(500) vs varchar(8000) при условии, что 100% данных будут до 500 символов

разницы не будет
Кроме возможных ошибок о превышении общего размера записи
blest
Дата: 29.01.2013 14:00:28
Glory
blest
Извиняюсь, я имел ввиду 90% данных будут ровно 50 символов

А остальные 10% будут 49 символов ? 48 ? 1 ?


Остальные будут 45-49 символов

Гавриленко Сергей Алексеевич
Однозначно:
1. varchar(50)
2. varchar(500)
3. varchar(8000)


Спасибо за ответ, но для общего понимания я хотел бы узнать будет ли разница между этими вариантами.
Glory
Дата: 29.01.2013 14:07:35
blest
Glory
пропущено...

А остальные 10% будут 49 символов ? 48 ? 1 ?


Остальные будут 45-49 символов

Тогда на 10 записях разница будет 5байт
на 1000 - 500байт
на 1 000 000 - 500 000 байт
varchar?
Дата: 29.01.2013 14:09:22
будут ли апдейтиться записи с изменением в большую сторону длины полей?
Гавриленко Сергей Алексеевич
Дата: 29.01.2013 14:09:24
1. Оверхед по хранению пробелов в char скорее всего перекроет все остальные мизерные выигрыши фиксированных типов у нефиксированных.
2. Добавьте два поля varchar(8000) в таблицу, и увидите мерзкий варнинг. Лично мне он не нравится.
3. Varchar(max) настолько другой и настолько предназначен для хранения большего объема данных, что разница в перфомансе будет видна невооруженным взглядом. Ищите поиском по форуму, мусолилось несколько раз.