При проектировании структуры метаданных в конфигураторе 1С перед разработчиком часто встает вопрос: как правильно настроить реквизит типа Строка (например, поле «Комментарий»), если его длина редко превышает 100–200 символов, а само поле может оставаться незаполненным? Проанализируем особенности хранения строковых типов на уровне СУБД, рассмотрим влияние настроек на производительность запросов и сформируем практические рекомендации по выбору длины.
В зависимости от параметров, указанных для строкового реквизита в конфигураторе (длина и признак допустимой длины), платформа 1С сопоставляет их с соответствующими типами данных СУБД (например, в MS SQL Server):
nvarchar(N). В строке таблицы выделяется служебный заголовок смещения (1–2 байта), а сами данные занимают ровно столько места, сколько символов ввел пользователь (удвоенное количество байт в кодировке Unicode плюс служебные байты длины). Если реквизит не заполнен (пустая строка), он не занимает лишнего дискового пространства и не дополняется пробелами.nchar(N). В таблице СУБД всегда резервируется фиксированный объем памяти: заданная длина строки, умноженная на 2 байта. Если введено меньше символов, СУБД дополняет остаток строки пробелами до максимального размера.nvarchar(max)). В основной строке таблицы сохраняется указатель (ссылка) на страницы LOB-хранилища, а само текстовое содержимое выносится в отдельный поток данных.Хотя вариант со строкой неограниченной длины кажется универсальным, он накладывает строгие ограничения на функционал платформы и механизмы запросов:
ГРУППИРОВАТЬ ПО, сортировки УПОРЯДОЧИТЬ ПО, условиях соединений ПО, проверках на равенство/неравенство в секции ГДЕ, а также в конструкциях ВЫБРАТЬ РАЗЛИЧНЫЕ и ОБЪЕДИНИТЬ (без модификатора ВСЕ). Для работы с такими полями в запросе всегда требуется их явное усечение:
ВЫБРАТЬ
ВЫРАЗИТЬ(Документ.Комментарий КАК Строка(100)) КАК КомментарийСокращенный
ИЗ
Документ.РеализацияТоваровУслуг КАК Документ
Разберем правила, которыми следует руководствоваться при создании строковых реквизитов: