Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
MS SQL SERVER 2012

есть ли смысл указывать длину VARCHAR если буду хранить меньше 8000 символов?

если все столбцы сделать VARCHAR(MAX), какие могут быть проблемы?

спасибо.
11 апр 17, 17:45    [20390679]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
MSSQLAndDotNet
есть ли смысл указывать длину VARCHAR если буду хранить меньше 8000 символов?
Да.

MSSQLAndDotNet
если все столбцы сделать VARCHAR(MAX), какие могут быть проблемы?
Они по другому хранятся и управляются, придётся чем то расплачиваться за использование VARCHAR(MAX), не получая при этом никаких преимуществ.
11 апр 17, 18:06    [20390767]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
alexeyvg
MSSQLAndDotNet
есть ли смысл указывать длину VARCHAR если буду хранить меньше 8000 символов?
Да.

MSSQLAndDotNet
если все столбцы сделать VARCHAR(MAX), какие могут быть проблемы?
Они по другому хранятся и управляются, придётся чем то расплачиваться за использование VARCHAR(MAX), не получая при этом никаких преимуществ.

спасибо
читал вот это:

автор
Similarly, unless the large value types out of row option is set to ON, varchar(max), nvarchar(max), varbinary(max), and xml columns are stored, if it is possible, inside the data row. If this is the case, the SQL Server Database Engine tries to fit the specific value if it can, and will push the value off-row otherwise. If large value types out of row is set to ON, the values are stored off-row and only a 16-byte text pointer is stored in the record.


автор
The maximum in-row storage for large value data types is set to 8,000 bytes when large value types out of row is OFF. Unlike the text in row option, you cannot specify the in-row limit for columns in the table.


https://msdn.microsoft.com/en-us/library/ms189087.aspx?f=255&MSPPError=-2147217396

получается что разницы нет
12 апр 17, 09:10    [20392404]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
o-o
Guest
MSSQLAndDotNet
получается что разницы нет

varchar(max) это LOB
и разница есть.
попробуйте навесить clustered columnstore index на таблицу с varchar(max)
или отребилдить таблицу с в другую FG: LOB останется в прежней группе.
----
даже инлайновая функция, принимающая аргумент varchar(max),
будет тормознее такой же с аргументом varchar(8000)
12 апр 17, 09:17    [20392425]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
o-o
MSSQLAndDotNet
получается что разницы нет

varchar(max) это LOB
и разница есть.
попробуйте навесить clustered columnstore index на таблицу с varchar(max)
или отребилдить таблицу с в другую FG: LOB останется в прежней группе.
----
даже инлайновая функция, принимающая аргумент varchar(max),
будет тормознее такой же с аргументом varchar(8000)


понял, спасибо

может тогда всегда делать VARCHAR(8000)?
12 апр 17, 09:32    [20392487]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
поймите меня правильно, я пытаюсь разобраться)
12 апр 17, 09:33    [20392495]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
MSSQLAndDotNet
получается что разницы нет
Разница не только в процитированном способе хранения, но и во многом другом.

Вы лучше так поставьте вопрос:

есть ли смысл использовать тип VARCHAR(MAX) если буду хранить меньше 8000 символов?
если все столбцы сделать VARCHAR(MAX), что я от этого получу?
12 апр 17, 09:36    [20392509]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
o-o
Guest
если нет вылазящих за 8000 символов значений,
то разумеется varchar(8000) предпочтительнее
12 апр 17, 09:37    [20392514]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
MSSQLAndDotNet
поймите меня правильно, я пытаюсь разобраться)
Да там перечислять замучаешся, что будет работать "не так"
Утилиты, средства разработки, репликация, импорт\экспорт, встроенные функции, работа DBCC и SHRINK, работа средств доступа (ODBC, OLEDB и т.д.)
Везде будете огребать по чуть чуть.
MSSQLAndDotNet
может тогда всегда делать VARCHAR(8000)?
Да, так можно. Писать число "меньше 8000" полезно только с точки зрения поддержки ограничений бизнес-логики, больше ни на что не влияет.
12 апр 17, 09:39    [20392523]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
o-o
если нет вылазящих за 8000 символов значений,
то разумеется varchar(8000) предпочтительнее


Например:
знаю что буду хранить не более 300 символов

получается могу смело писать varchar(8000) вместо varchar(300) и не потеряю ни производительности, ни в чем другом.

так?
12 апр 17, 09:44    [20392545]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
все понятно

https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1256784&msg=20392523

спасибо. вопрос снят
12 апр 17, 09:46    [20392558]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
o-o
Guest
в смысле, всегда что ли писать 8000?
а зачем, если знаете, что не превысит 300?
с ходу не вижу, чем это может грозить,
но думаю, ничем,
разве что полезут ворнинги при создании индексов с такими полями,
т.к. ограничение на длину ключа 900 байт.
но создать создаст
12 апр 17, 09:52    [20392593]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
o-o
разве что полезут ворнинги при создании индексов с такими полями,
т.к. ограничение на длину ключа 900 байт.
но создать создаст

А при вставке строки с ключевыми полями, в сумме объемом больше 900 байт, таки рванет.
12 апр 17, 10:45    [20392870]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
o-o
Guest
Сон Веры Павловны
o-o
разве что полезут ворнинги при создании индексов с такими полями,
т.к. ограничение на длину ключа 900 байт.
но создать создаст

А при вставке строки с ключевыми полями, в сумме объемом больше 900 байт, таки рванет.

это не ко мне, а к автору топика.
он божится, что превышения не будет.
вот он и должен это обеспечить, уж точно не я
12 апр 17, 10:47    [20392885]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Сон Веры Павловны
o-o
разве что полезут ворнинги при создании индексов с такими полями,
т.к. ограничение на длину ключа 900 байт.
но создать создаст

А при вставке строки с ключевыми полями, в сумме объемом больше 900 байт, таки рванет.

воо, таки есть разница

получается VARCHAR(900) самое то :)
12 апр 17, 11:07    [20393011]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
o-o
Guest
MSSQLAndDotNet
Сон Веры Павловны
пропущено...

А при вставке строки с ключевыми полями, в сумме объемом больше 900 байт, таки рванет.

воо, таки есть разница

получается VARCHAR(900) самое то :)

о блин,если при вставке реальные значения не превысят 900 байт,
ничего не рванет,
вы же божились, что даже 300 не превышает?
и при чем тут varchar(900),
когда 900 это макс. суммарный рамер?
может, ключ составной, полей 3, ну так надо 3 по varchar(300),
чтобы не превысить
12 апр 17, 11:16    [20393078]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
o-o
и при чем тут varchar(900),
когда 900 это макс. суммарный рамер?
может, ключ составной, полей 3, ну так надо 3 по varchar(300),
чтобы не превысить
Нормальные пацаны для ключей строки не используют.
12 апр 17, 11:21    [20393096]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
o-o
MSSQLAndDotNet
пропущено...

воо, таки есть разница

получается VARCHAR(900) самое то :)

о блин,если при вставке реальные значения не превысят 900 байт,
ничего не рванет,
вы же божились, что даже 300 не превышает?
и при чем тут varchar(900),
когда 900 это макс. суммарный рамер?
может, ключ составной, полей 3, ну так надо 3 по varchar(300),
чтобы не превысить

точно, составной может быть
тогда varchar(8000)
12 апр 17, 11:21    [20393097]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
Хе-хе )
Guest
MSSQLAndDotNet
получается VARCHAR(900) самое то :)

Но не NVarchar(900 )
12 апр 17, 11:22    [20393099]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
MSSQLAndDotNet
получается VARCHAR(900) самое то :)
А если индекс будет по двум символьным столбцам?
12 апр 17, 11:27    [20393142]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
o-o
Guest
iap
o-o
и при чем тут varchar(900),
когда 900 это макс. суммарный рамер?
может, ключ составной, полей 3, ну так надо 3 по varchar(300),
чтобы не превысить
Нормальные пацаны для ключей строки не используют.

да надо же.
если номер паспорта, ssn, фискальный код и пр. уникально,
мы не будем unique constraint вешать,
религия не позволит, ага?
12 апр 17, 11:30    [20393164]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
iap
Нормальные пацаны для ключей строки не используют.

Нормальные пацаны и все строковые поля по VARCHAR(8000) не делают.
12 апр 17, 11:31    [20393170]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
Хе-хе )
Guest
iap
Нормальные пацаны для ключей строки не используют.

Даже микрософт в своем динамиксе гуиды для ключей используют.Не последовательные. А это по сути строка
12 апр 17, 11:34    [20393191]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Сон Веры Павловны
iap
Нормальные пацаны для ключей строки не используют.

Нормальные пацаны и все строковые поля по VARCHAR(8000) не делают.

почему?
12 апр 17, 11:38    [20393213]     Ответить | Цитировать Сообщить модератору
 Re: VARCHAR(MAX) VS VARCHAR(N)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
MSSQLAndDotNet
Сон Веры Павловны
пропущено...

Нормальные пацаны и все строковые поля по VARCHAR(8000) не делают.

почему?
зачем? если надо 4 делаем 4
12 апр 17, 11:39    [20393219]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить