Вход | Регистрация
 

слабое место запроса

слабое место запроса
Я
   Dom26
 
17.04.19 - 10:35
долго работает запрос, проблема в том что достаю три вида документа да еще и из двух регистров

Запрос = Новый Запрос;                      
    Запрос.Текст = "ВЫБРАТЬ
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Объект КАК Объект,
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Статус
                   |ПОМЕСТИТЬ Статусы
                   |ИЗ
                   |    РегистрСведений.бит_ИсторияИзмененияСтатусовОбъектов.СрезПоследних(
                   |            ,
                   |            Объект ССЫЛКА Документ.бит_ПроектДоговора
                   |                И (ВЫРАЗИТЬ(Объект КАК Документ.бит_ПроектДоговора).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Объект,
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Статус
                   |ИЗ
                   |    РегистрСведений.бит_ИсторияИзмененияСтатусовОбъектов.СрезПоследних(
                   |            ,
                   |            Объект ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
                   |                И (ВЫРАЗИТЬ(Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Объект,
                   |    бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних.Статус
                   |ИЗ
                   |    РегистрСведений.бит_ИсторияИзмененияСтатусовОбъектов.СрезПоследних(
                   |            ,
                   |            Объект ССЫЛКА Документ.бит_ЗаявкаНаРасходованиеСредств
                   |                И (ВЫРАЗИТЬ(Объект КАК Документ.бит_ЗаявкаНаРасходованиеСредств).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ РАЗРЕШЕННЫЕ
                   |    ВложенныйЗапрос1.Заявка.Дата КАК ДатаЗаявки,
                   |    ВложенныйЗапрос1.Заявка.Номер КАК НомерДокумента,
                   |    ВложенныйЗапрос1.Заявка КАК Документ,
                   |    ВложенныйЗапрос1.Заявка.Организация КАК Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент КАК Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявок.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявок.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявок.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявок КАК СтоунДоступностьЗаявок
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявок.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявок.Доступ
                   |        И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявокВАрхиве.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявокВАрхиве.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявокВАрхиве КАК СтоунДоступностьЗаявокВАрхиве
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявокВАрхиве.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявокВАрхиве.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявокВАрхиве.Доступ
                   |        И СтоунДоступностьЗаявокВАрхиве.Заявка ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявок.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявок.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявок.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявок КАК СтоунДоступностьЗаявок
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.бит_ПроектДоговора).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявок.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявок.Доступ
                   |        И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.бит_ПроектДоговора) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ПроектДоговора)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявокВАрхиве.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявокВАрхиве.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявокВАрхиве КАК СтоунДоступностьЗаявокВАрхиве
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявокВАрхиве.Заявка КАК Документ.бит_ПроектДоговора).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявокВАрхиве.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявокВАрхиве.Доступ
                   |        И СтоунДоступностьЗаявокВАрхиве.Заявка ССЫЛКА Документ.бит_ПроектДоговора) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ПроектДоговора)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявок.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявок.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявок.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявок КАК СтоунДоступностьЗаявок
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.бит_ЗаявкаНаРасходованиеСредств).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявок.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявок.Доступ
                   |        И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.бит_ЗаявкаНаРасходованиеСредств) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ЗаявкаНаРасходованиеСредств)))
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос1.Заявка.Дата,
                   |    ВложенныйЗапрос1.Заявка.Номер,
                   |    ВложенныйЗапрос1.Заявка,
                   |    ВложенныйЗапрос1.Заявка.Организация,
                   |    ВложенныйЗапрос1.Заявка.Контрагент,
                   |    ВложенныйЗапрос1.Пользователь,
                   |    ВложенныйЗапрос1.Доступ,
                   |    Статусы.Статус,
                   |    ВложенныйЗапрос1.ВАрхив
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка КАК Заявка,
                   |        СтоунДоступностьЗаявокВАрхиве.Пользователь КАК Пользователь,
                   |        СтоунДоступностьЗаявокВАрхиве.Доступ КАК Доступ,
                   |        СтоунДоступностьЗаявокВАрхиве.Заявка.ВАрхив КАК ВАрхив
                   |    ИЗ
                   |        РегистрСведений.СтоунДоступностьЗаявокВАрхиве КАК СтоунДоступностьЗаявокВАрхиве
                   |    ГДЕ
                   |        ВЫРАЗИТЬ(СтоунДоступностьЗаявокВАрхиве.Заявка КАК Документ.бит_ЗаявкаНаРасходованиеСредств).Дата МЕЖДУ &НачалоПериода И &КонецПериода
                   |        И СтоунДоступностьЗаявокВАрхиве.Пользователь = &Ответственный
                   |        И СтоунДоступностьЗаявокВАрхиве.Доступ
                   |        И СтоунДоступностьЗаявокВАрхиве.Заявка ССЫЛКА Документ.бит_ЗаявкаНаРасходованиеСредств) КАК ВложенныйЗапрос1
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Статусы КАК Статусы
                   |        ПО (ВложенныйЗапрос1.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ЗаявкаНаРасходованиеСредств)))
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ДатаЗаявки";
 
 
   Dom26
 
1 - 17.04.19 - 10:36
рабоет долго, , где тут могут быть слабые места?
   Dom26
 
2 - 17.04.19 - 10:41
даже не получается из трех регистров
   НЕА123
 
3 - 17.04.19 - 10:41
а зачем в одну ВТ все?
   Широкий
 
4 - 17.04.19 - 10:41
СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив 
И 
 ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода 

Терпения не хватило прописать Выразить?
   Dom26
 
5 - 17.04.19 - 10:44
(4) блин точно, ща посомтрим
   МимохожийОднако
 
6 - 17.04.19 - 10:44
Замерь запросы по отдельности. Оптимизируй, а потом объединяй. Или измени план запроса на другой
   МимохожийОднако
 
7 - 17.04.19 - 10:47
Можно сначала получить все документы, а потом уже обращаться к таблице истории изменения статусов
   Широкий
 
8 - 17.04.19 - 10:48
Какой нафиг смысл 3 объединений если у тебя все равно индекс не юзается..
Далай одну выборку (я про самое первое)
   Широкий
 
9 - 17.04.19 - 10:50
+6 и да.. сначала получи доки за период..
Потом сделай запро к Регистру сведений с фильтром по выбранным докам - и потом все соедини
   Dom26
 
10 - 17.04.19 - 10:56
(8) а разве не обьединения не лучше чем или тут?
 
 Рекламное место пустует
   Жан Пердежон
 
11 - 17.04.19 - 11:05
(0) кстати, если тебе нужен текущий статус, а значение из истории на определенный момент - лучше использовать
РС.бит_СтатусыОбъектов
   Широкий
 
12 - 17.04.19 - 11:08
(10) че лучше то?
СрезПоследних само по себе тяжелое.. а ты его три раза делаешь. Причем поиск не по индекус идет
   Dom26
 
13 - 17.04.19 - 11:17
(12) а еще такой вопросик надо отдельно ставить условие на тип дока если есть выразить ().дата между...?
   toypaul
 
14 - 17.04.19 - 11:18
заменить ВЫРАЗИТЬ(Ссылка) на соединение с таблицей нужного документа и сделать отбор по дате из этой таблицы
   craxx
 
15 - 17.04.19 - 11:18
И вложенные запросы я бы как можно меньше пользовал. Лучше еще одну ВТ
   Dom26
 
16 - 17.04.19 - 11:44
(14) а разве в связи не надо тоже выразить тогда писать?
   toypaul
 
17 - 17.04.19 - 11:53
(16) нет
   Nyoko
 
18 - 17.04.19 - 12:11
(0)
Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот))) 
Замени лучше 

Заявка = Статусы.Объект и Статусы.Объект Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
   Nyoko
 
19 - 17.04.19 - 12:11
Заявка = Статусы.Объект и Статусы.Объект ссылка Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
   Широкий
 
20 - 17.04.19 - 12:12
(13) см 9  -у тебя список доков должен быть в фильтре
   Glup0sti
 
21 - 17.04.19 - 12:37
Явная ошибка 3 раза срез последних. Нужно "... Объект В (ВЫБРАТЬ Ссылка ИЗ Документ.бит_ПроектДоговора ГДЕ Дата МЕЖДУ ... ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Ссылка ИЗ Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот ГДЕ Дата МЕЖДУ...) ".

Вложенный запрос вообще не нужен, соединяешь сразу СтоунДоступностьЗаявокВАрхиве  И Статусы. ВЫРАЗИТЬ в условии соединения беЗсмысленно

Возможно РАЗРЕШЕННЫЕ и на ВТ поставить.

Остальное только по плану запроса.
   Dom26
 
22 - 17.04.19 - 16:05
(21) там же куча условий во ввложеных запросах, разве сначало он не прведет связь и только потомне наложит условия?
   Euguln
 
23 - 17.04.19 - 16:11
1. Все обращения к БД по возможности поместить в ВТ.
2. ВТ проиндексировать.
3. Условия отбора ВТ регистра засунуть в поле и проиндексировать.
   МаленькийВопросик
 
24 - 17.04.19 - 17:21
Избавься от конструкций

ВложенныйЗапрос1.Заявка.Дата,

Как ребята сказали проиндексируй ВТ.
   Simod
 
25 - 18.04.19 - 08:04
Трэш какой-то...

Использование "... ССЫЛКА ..." позволяет проверить тип ОБЪЕКТА без соединения с таблицей объекта, а ВЫРАЗИТЬ(...) создает соединение для проверки вхождения ДАТА в диапазон. Поэтому, конструкции типа:

ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода 
...
И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
идентичны внутреннему соединению

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот КАК ЗаявкаНаСогласованиеАктаВыполненныхРабот
    ПО СтоунДоступностьЗаявок.Заявка = ЗаявкаНаСогласованиеАктаВыполненныхРабот.Ссылка
    И ЗаявкаНаСогласованиеАктаВыполненныхРабот.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Как сказали ранее, для среза последних следует собрать ВТ объединением трех типов документов и проиндексировать.
   xXeNoNx
 
26 - 18.04.19 - 09:08
А расскажите мне что значит:

СрезПоследних(
                   |            ,
                   |            Объект ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот 
                   |                И (ВЫРАЗИТЬ(Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних
   Darych
 
27 - 18.04.19 - 09:11
(25) ну индексация... померить так и так надо)
   xXeNoNx
 
28 - 18.04.19 - 09:13
А шо, нельзя сначала доки получить, а потом сделать отбор срезе?
   xXeNoNx
 
29 - 18.04.19 - 09:19
(23) лишь бы все индексировать...., тут и помимо индексов косяков дохрена
   Glup0sti
 
30 - 18.04.19 - 09:53
(22) если хочется, некоторые условия можно в условия соединения, оптимизатор разберется в порядке применения ограничений
   luter-89
 
31 - 18.04.19 - 09:56
(23) Лишь бы проиндексировать.
Там где надо и там где не надо...
   Simod
 
32 - 18.04.19 - 10:14
Да, если собрать таблицу по трем типам документов, то индексация может ничего не дать, т.к. поле будет составного типа. Но попробовать стоит.
   Euguln
 
33 - 18.04.19 - 11:38
(29) см п 1.
 
 


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует