Intereting Posts
Обнуление запросов к SQL Server Что происходит в экземплярах пользователей SQL Server, которые делают их невозможными в не экспресс-версиях? Почему один и тот же запрос Linq-to-SQL потребляет гораздо больше времени процессора на сервере базы данных для другого проекта? Есть ли реализация функции STRAGG Tom Kyte, поддерживающей SQL Server? Как переименовать имя таблицы с помощью SQL-запроса? Как вы помните / управляете своими примерами SQL? SQL Server 2012 – службы Analysis Services не включены в экран «Выбор функций» установщика Выберите строки с соответствующими столбцами из SQL Server Можем ли мы создать скалярную функцию в SQL Server как детерминированную и точную? Определение размера базы данных SQL Server Роли, схемы, пользователи SQL Server C # конвертировать UTC int в объект DateTime суммирование некоторых значений узлов xml в sql server 2008 Можно ли сжимать данные на SQL Server с помощью zlib? Нужна помощь в подключении к классу Microsoft.SqlServer.Management.Smo Transfer

SQL Server: лучше использовать varchar (MAX) или сохранить отдельную таблицу заметок, а INNER JOIN?

У нас есть основная запись, которая позволяет пользователям вводить заметки. Для каждой первичной записи имеется 18 отдельных полей «примечаний».

В настоящее время мы нормализуем его к другой таблице, называемой заметками, с столбцом внешнего ключа ID и одним столбцом varchar (8000), тогда мы просто ВХОДЯЕМ СОХРАНЕНИЕ их вместе по мере необходимости. Я считаю, что это был рекомендованный подход в SQL Server 2000.

Недавно мы перешли на SQL Server 2008 с varchar (MAX), и нам интересно, насколько это лучше или равно для производительности, если мы избавимся от нашей отдельной таблицы заметок и вместо этого используем varchar (MAX). Это было бы более удобно.

Solutions Collecting From Web of "SQL Server: лучше использовать varchar (MAX) или сохранить отдельную таблицу заметок, а INNER JOIN?"

Я не совсем понимаю вашу настройку … если вы говорите, что пользователь может ввести 18 отдельных заметок (предположительно из разных «типов»), тогда вы должны сохранить таблицу вторичных заметок. В этом случае, да, переход с varchar(8000) в varchar(MAX) позволит пользователю хранить в заметках более 8000 символов.

Чтобы быть ясным, если пользователь вводит отдельные заметки, тогда вы должны оставить таблицы нормализованными, как они есть у вас сейчас. Независимо от того, следует ли переключать с varchar(8000) на varchar(max) , возникает вопрос о том, хотите ли вы разрешить пользователям вводить более 8000 символов. Обратите внимание: если они это сделают, содержимое будет храниться вне строки, как если бы вы использовали тип TEXT в SQL Server до 2005 года.

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

Это то, что вы просите?

Наличие поля varchar(max) в вашей «первичной» таблице – плохая идея, особенно если у вас уже есть ее нормализация.

Это также приведет к разбиению страниц, фрагментации и действительно низкой производительности на вашей основной таблице.

Когда кто-то добавляет заметку, если поле не находится в этой таблице заметок, оно может заполнить страницу данных и заставить ее разбить на другую страницу, которая является фрагментацией, которая является ПЛОХОЙ .

Лучшим вариантом было бы сохранить таблицу Notes (вы все равно можете увеличить длину примечания, используя VARCHAR (MAX), который приведет к некоторому замедлению).

Это позволит вам обрабатывать каждую заметку независимо от других как отдельные объекты в базе данных.

Я бы установил одну таблицу Note с первичным ключом, состоящим из внешнего ключа, к его родительскому объекту и номеру примечания, и одному столбцу [n] varchar (max). Это позволяет вам иметь несколько заметок на родительский объект.

varchar (max) будет хранить до 8000 октетов в одном стандартном столбце. если размер превышает это (до 2,1 гб макс), данные перетекают на страницы переполнения, как и в [now-deprecated] text / ntext / image. Работа с данными text / blob была огромной проблемой: теперь SQL обрабатывает ее sotto voce . Все, что вы вернетесь, это строка.