Ускорил программу для мамбирования. База выросла настолько, что поиск неотвеченных последних сообщений (обычно штук 20-30) порой занимал несколько часов.
Предусмотрительно я завел регистр с возможностью среза последних по измерениям Отправитель + Получатель + Шаблон сообщения.
Переписал старый код запроса на новый код, начало работать существенно быстрее. Не мгновенно, но все равно, все равно.
Так што прикольно.
Для интересующихся детали под катом.
Был запрос:
ВЫБРАТЬ
Сообщения.Ссылка КАК Сообщение,
Сообщения.Отправитель КАК Отправитель,
Сообщения.Получатель КАК Получатель,
Сообщения.ДатаОтправки КАК ДатаОтправки,
Сообщения.Дата КАК Дата,
Сообщения.ШаблонСообщения КАК ШаблонСообщения,
Сообщения.Ссылка КАК Объект,
ВЫБОР
КОГДА ЕСТЬNULL(ТОтвеченоВручную.Существует, ЛОЖЬ)
ИЛИ Сообщения.НеОтвечать
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ОтвеченоВручную,
ВЫБОР
КОГДА Сообщения.ШаблонСообщения = ЗНАЧЕНИЕ(Справочник.пимШаблоныСообщений.П
ТОГДА ПОДСТРОКА(Сообщения.Текст, 1, 4096)
ИНАЧЕ ПОДСТРОКА(Сообщения.ШаблонСообщения.Текс
КОНЕЦ КАК Текст
ИЗ
Документ.пимСообщение КАК Сообщения
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ПимСообщение.Получатель КАК Получатель,
ПимСообщение.Отправитель КАК Отправитель,
МАКСИМУМ(ПимСообщение.Дата) КАК Дата,
ИСТИНА КАК Существует
ИЗ
Документ.пимСообщение КАК ПимСообщение
ГДЕ
ПимСообщение.ШаблонСообщения = ЗНАЧЕНИЕ(Справочник.пимШаблоныСообщений.П
СГРУППИРОВАТЬ ПО
ПимСообщение.Получатель,
ПимСообщение.Отправитель) КАК ТОтвеченоВручную
ПО (ТОтвеченоВручную.Получатель = Сообщения.Отправитель)
И (ТОтвеченоВручную.Отправитель = Сообщения.Получатель)
И (ТОтвеченоВручную.Дата > Сообщения.Дата)
Стал запрос:
ВЫБРАТЬ
ТМне.Регистратор КАК Сообщение,
ТМне.Период КАК Дата,
ТМне.ШаблонСообщения КАК ШаблонСообщения,
ТМне.Отправитель КАК Отправитель
ПОМЕСТИТЬ Т
ИЗ
РегистрСведений.пимИндексаторСообще
,
Получатель = &Я
И Период > &Дата
И (НЕ НеОтвечать)) КАК ТМне
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пимИндексаторСообщений.С
,
Отправитель = &Я
И Период > &Дата
И ШаблонСообщения = ЗНАЧЕНИЕ(Справочник.пимШаблоныСообщений.П
ПО ТМне.Отправитель = ТОтМеня.Получатель
ГДЕ
(ТМне.Период >= ТОтМеня.Период
ИЛИ ТОтМеня.Период ЕСТЬ NULL )
;
////////////////////////////////////////
ВЫБРАТЬ
Т.Сообщение,
Т.Дата,
Т.Отправитель,
ВЫБОР
КОГДА Т.ШаблонСообщения = ЗНАЧЕНИЕ(Справочник.пимШаблоныСообщений.П
ТОГДА ПОДСТРОКА(Т.Сообщение.Текст, 1, 4096)
ИНАЧЕ ПОДСТРОКА(Т.ШаблонСообщения.Текст, 1, 4096)
КОНЕЦ КАК Текст
ИЗ
Т КАК Т
Journal information