Подтвердить что ты не робот

Почему бы не использовать varchar (max)?

Я немного старая школа, когда речь идет о дизайне базы данных, поэтому я полностью использую правильные размеры данных в столбцах. Однако, рассматривая базу данных для друга, я заметил, что он использовал varchar(max) много. Теперь, моя непосредственная мысль - вернуть его ему и сказать ему изменить его. Но потом я подумал об этом и не смог придумать для него веские причины не использовать его (он использовал инструмент типа case для генерации db, если вам интересно).

Я изучаю тему использования varchar(max), и у меня не может быть причин для его использования.

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

Любая помощь будет оценена, чтобы помочь мне заставить его увидеть свет:).

4b9b3361

Ответ 1

Мой ответ на этот вопрос заключается не в использовании Max, а в том, что касается VARCHAR (max) и TEXT.

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

Во-вторых, это то, что позволяют поля.

TEXT сложно обновить по сравнению с VARCHAR, но вы получаете преимущество Full Text Indexing и множество умных вещей.

С другой стороны, VARCHAR (MAX) имеет некоторую двусмысленность, если размер ячейки равен < 8000 символов, это будет рассматриваться как данные Row. Если он больше, он будет рассматриваться как объект хранения для хранения. Поскольку вы не можете знать об этом без запроса RBAR, у этого могут быть стратегии оптимизации для мест, где вам нужно быть уверенными в своих данных и сколько их читает.

В противном случае, если ваше использование относительно мирское, и вы не ожидаете иметь проблемы с размером данных (IE, который вы используете .Net, и поэтому не нужно беспокоиться о размере вашей строки /w 980 > *), тогда использование VARCHAR (max) отлично.

Ответ 2

Существует сообщение в блоге о том, почему не использовать varchar max здесь

Edit

Основное отличие заключается в том, где хранятся данные. Строка SQL Data имеет максимальный размер 8000 байтов (или 8K). Затем 2GB varchar (max) не может быть сохранен в строке данных. SQL Server хранит его "Вне строки".

Поэтому вы можете получить удар производительности, так как данные не будут находиться в одном и том же месте на диске, см. http://msdn.microsoft.com/en-us/library/ms189087.aspx

Ответ 3

Если вы работаете в среде OLTP, вы все о производительности. От накладных расходов и настроек зависит ограничение индексирования и узкие места запросов. Использование varcahr (max) или любого другого типа LOB, скорее всего, противоречит большинству лучших методов проектирования, поэтому, если не существует конкретной бизнес-потребности, которая не может быть обработана с использованием какого-либо другого механизма ввода текста, и только varchar (max) будет соответствовать законопроект, то зачем подвергать вашу систему и приложения воздействию проблем с накладными расходами и производительности, присущих одному из типов данных LOB?

Если, с другой стороны, вы работаете в среде OLAP или в среде DW Star Schema с таблицами Dimension с полями дескрипторов, которые, естественно, должны быть подробными, а затем varchar (max), если вы не добавляете это к индекс может быть полезен. Тем не менее, я рекомендовал бы тогда использовать char (x) varchar (x). Как всегда лучше использовать только те ресурсы, которые вам абсолютно необходимы, чтобы выполнить работу.

Ответ 4

Они НЕ должны использоваться, если вы не ожидаете больших объемов данных, и вот почему (непосредственно из Books Online):

Столбцы, содержащие типы данных большого объекта (LOB) ntext, text, varchar (max), nvarchar (max), varbinary (max), xml или изображение не могут быть заданные в качестве ключевых столбцов для индекса.

Если вы хотите повысить производительность, используйте nvarchar для всего.

Ответ 5

Я не знаю, как sql-сервер обрабатывает большие (объявленные) поля varchar с точки зрения производительности, памяти и хранилища. Но если предположить, что он делает это так же эффективно, как и более мелкие объявленные поля varchar, все равно преимущество ограничений целостности.

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

Ответ 6

Разница в следующем:
VARCHAR(X) можно индексировать и хранить в файле данных MDF/NDF.
VARCHAR(MAX) не может быть проиндексирован, поскольку может достигать большой громкости, а затем будет храниться как отдельный файл, а не в файле данных MDF/NDF.