мне нужна отдельная таблица для описания nvarchar (max) - PullRequest
3 голосов
/ 11 сентября 2009

В одной из моих предыдущих компаний у нас была отдельная таблица, в которой мы сохраняли длинные описания в столбце типа текста. Я думаю, что это было сделано из-за ограничений, связанных с типом текста.

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

Пока я не вижу причин отделять этот столбец от другой таблицы.

Не могли бы вы дать мне информацию, если я что-то упустил или если хранение моих описаний в одной таблице на varchar (max) - это хороший подход? Спасибо!

Ответы [ 2 ]

6 голосов
/ 11 сентября 2009

Держите поля в таблице, где они принадлежат. Начиная с SQL Server 2005, механизм стал намного умнее в отношении больших типов данных и даже коротких типов данных переменной длины. Старые типы TEXT, NTEXT и IMAGE устарели. Новые типы с максимальной длиной являются их заменой. В SQL 2005 каждый раздел имеет 3 типа базовых единиц выделения: один для строк, один для больших объектов и один для переполнения строк. Типы MAX хранятся в модуле выделения больших объектов, поэтому механизм управляет отдельной таблицей для хранения больших объектов. Единица переполнения строки предназначена для данных переменной длины в строке, которые после обновления больше не помещаются на странице, поэтому они «переполняются» в отдельный блок.

См. Организация таблиц и индексов .

1 голос
/ 11 сентября 2009

Это зависит от того, как часто вы их используете, но да, вы можете использовать их на отдельной таблице. Прежде чем вы примете решение, вы захотите ознакомиться с подкачкой файлов SQL, разбиением страниц и подробностями того, как sql хранит данные.

Короткий ответ заключается в том, что varcharmax () может определенно вызвать снижение производительности, когда длина этих полей сильно меняется из-за увеличения разбиения страниц, что является дорогостоящей операцией.

...