fixin (fixin) wrote,
fixin
fixin

Ускорил мамбу



Ускорил программу для мамбирования. База выросла настолько, что поиск неотвеченных последних сообщений (обычно штук 20-30) порой занимал несколько часов.


Предусмотрительно я завел регистр с возможностью среза последних по измерениям Отправитель + Получатель + Шаблон сообщения.


Переписал старый код запроса на новый код, начало работать существенно быстрее. Не мгновенно, но все равно, все равно.


Так што прикольно.



Для интересующихся детали под катом.



Был запрос:


ВЫБРАТЬ
 Сообщения.Ссылка КАК Сообщение,
 Сообщения.Отправитель КАК Отправитель,
 Сообщения.Получатель КАК Получатель,
 Сообщения.ДатаОтправки КАК ДатаОтправки,
 Сообщения.Дата КАК Дата,
 Сообщения.ШаблонСообщения КАК ШаблонСообщения,
 Сообщения.Ссылка КАК Объект,
 ВЫБОР
  КОГДА ЕСТЬNULL(ТОтвеченоВручную.Существует, ЛОЖЬ)
    ИЛИ Сообщения.НеОтвечать
   ТОГДА ИСТИНА
  ИНАЧЕ ЛОЖЬ
 КОНЕЦ КАК ОтвеченоВручную,
 ВЫБОР
  КОГДА Сообщения.ШаблонСообщения = ЗНАЧЕНИЕ(Справочник.пимШаблоныСообщений.ПустаяСсылка)
   ТОГДА ПОДСТРОКА(Сообщения.Текст, 1, 4096)
  ИНАЧЕ ПОДСТРОКА(Сообщения.ШаблонСообщения.Текст, 1, 4096)
 КОНЕЦ КАК Текст
ИЗ
 Документ.пимСообщение КАК Сообщения
  ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   ПимСообщение.Получатель КАК Получатель,
   ПимСообщение.Отправитель КАК Отправитель,
   МАКСИМУМ(ПимСообщение.Дата) КАК Дата,
   ИСТИНА КАК Существует
  ИЗ
   Документ.пимСообщение КАК ПимСообщение
  ГДЕ
   ПимСообщение.ШаблонСообщения = ЗНАЧЕНИЕ(Справочник.пимШаблоныСообщений.ПустаяСсылка)
  
  СГРУППИРОВАТЬ ПО
   ПимСообщение.Получатель,
   ПимСообщение.Отправитель) КАК ТОтвеченоВручную
  ПО (ТОтвеченоВручную.Получатель = Сообщения.Отправитель)
   И (ТОтвеченоВручную.Отправитель = Сообщения.Получатель)
   И (ТОтвеченоВручную.Дата > Сообщения.Дата)


Стал запрос:


ВЫБРАТЬ
 ТМне.Регистратор КАК Сообщение,
 ТМне.Период КАК Дата,
 ТМне.ШаблонСообщения КАК ШаблонСообщения,
 ТМне.Отправитель КАК Отправитель
ПОМЕСТИТЬ Т
ИЗ
 РегистрСведений.пимИндексаторСообщений.СрезПоследних(
   ,
   Получатель = &Я
    И Период > &Дата
    И (НЕ НеОтвечать)) КАК ТМне
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пимИндексаторСообщений.СрезПоследних(
    ,
    Отправитель = &Я
     И Период > &Дата
     И ШаблонСообщения = ЗНАЧЕНИЕ(Справочник.пимШаблоныСообщений.ПустаяСсылка)) КАК ТОтМеня
  ПО ТМне.Отправитель = ТОтМеня.Получатель
ГДЕ
 (ТМне.Период >= ТОтМеня.Период
   ИЛИ ТОтМеня.Период ЕСТЬ NULL )
;


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 Т.Сообщение,
 Т.Дата,
 Т.Отправитель,
 ВЫБОР
  КОГДА Т.ШаблонСообщения = ЗНАЧЕНИЕ(Справочник.пимШаблоныСообщений.ПустаяСсылка)
   ТОГДА ПОДСТРОКА(Т.Сообщение.Текст, 1, 4096)
  ИНАЧЕ ПОДСТРОКА(Т.ШаблонСообщения.Текст, 1, 4096)
 КОНЕЦ КАК Текст
ИЗ
 Т КАК Т


 

Tags: мамбирование
Subscribe
promo fixin december 31, 2037 16:57 1415
Buy for 30 tokens
UPD: Друзья, в августе 2019 года блог переехал на http://fixinchik.ru. Welcome! Добро пожаловать в журнал Осипова Сергея Александровича, известного также как Fixin и Гений 1С. Рекомендую ознакомиться с Часто Задаваемыми Вопросами обо мне. Что я хочу в подарок - список. Мой проект "…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments