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

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

слабое место запроса
Я
   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.


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