|
слабое место запроса | ☑ | ||
---|---|---|---|---|
0
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.Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.бит_ЗаявкаНаРасходованиеСредств))) | |УПОРЯДОЧИТЬ ПО | ДатаЗаявки"; |
|||
1
Dom26
17.04.19
✎
10:36
|
рабоет долго, , где тут могут быть слабые места?
|
|||
2
Dom26
17.04.19
✎
10:41
|
даже не получается из трех регистров
|
|||
3
НЕА123
17.04.19
✎
10:41
|
а зачем в одну ВТ все?
|
|||
4
Широкий
17.04.19
✎
10:41
|
СтоунДоступностьЗаявок.Заявка.ВАрхив КАК ВАрхив
И ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода Терпения не хватило прописать Выразить? |
|||
5
Dom26
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 и да.. сначала получи доки за период..
Потом сделай запро к Регистру сведений с фильтром по выбранным докам - и потом все соедини |
|||
10
Dom26
17.04.19
✎
10:56
|
(8) а разве не обьединения не лучше чем или тут?
|
|||
11
Жан Пердежон
17.04.19
✎
11:05
|
(0) кстати, если тебе нужен текущий статус, а значение из истории на определенный момент - лучше использовать
РС.бит_СтатусыОбъектов |
|||
12
Широкий
17.04.19
✎
11:08
|
(10) че лучше то?
СрезПоследних само по себе тяжелое.. а ты его три раза делаешь. Причем поиск не по индекус идет |
|||
13
Dom26
17.04.19
✎
11:17
|
(12) а еще такой вопросик надо отдельно ставить условие на тип дока если есть выразить ().дата между...?
|
|||
14
toypaul
гуру
17.04.19
✎
11:18
|
заменить ВЫРАЗИТЬ(Ссылка) на соединение с таблицей нужного документа и сделать отбор по дате из этой таблицы
|
|||
15
craxx
17.04.19
✎
11:18
|
И вложенные запросы я бы как можно меньше пользовал. Лучше еще одну ВТ
|
|||
16
Dom26
17.04.19
✎
11:44
|
(14) а разве в связи не надо тоже выразить тогда писать?
|
|||
17
toypaul
гуру
17.04.19
✎
11:53
|
(16) нет
|
|||
18
Nyoko
17.04.19
✎
12:11
|
(0)
Заявка = (ВЫРАЗИТЬ(Статусы.Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот))) Замени лучше Заявка = Статусы.Объект и Статусы.Объект Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот |
|||
19
Nyoko
17.04.19
✎
12:11
|
Заявка = Статусы.Объект и Статусы.Объект ссылка Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот
|
|||
20
Широкий
17.04.19
✎
12:12
|
(13) см 9 -у тебя список доков должен быть в фильтре
|
|||
21
Glup0sti
17.04.19
✎
12:37
|
Явная ошибка 3 раза срез последних. Нужно "... Объект В (ВЫБРАТЬ Ссылка ИЗ Документ.бит_ПроектДоговора ГДЕ Дата МЕЖДУ ... ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Ссылка ИЗ Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот ГДЕ Дата МЕЖДУ...) ".
Вложенный запрос вообще не нужен, соединяешь сразу СтоунДоступностьЗаявокВАрхиве И Статусы. ВЫРАЗИТЬ в условии соединения беЗсмысленно Возможно РАЗРЕШЕННЫЕ и на ВТ поставить. Остальное только по плану запроса. |
|||
22
Dom26
17.04.19
✎
16:05
|
(21) там же куча условий во ввложеных запросах, разве сначало он не прведет связь и только потомне наложит условия?
|
|||
23
Euguln
17.04.19
✎
16:11
|
1. Все обращения к БД по возможности поместить в ВТ.
2. ВТ проиндексировать. 3. Условия отбора ВТ регистра засунуть в поле и проиндексировать. |
|||
24
Маленький Вопросик
17.04.19
✎
17:21
|
Избавься от конструкций
ВложенныйЗапрос1.Заявка.Дата, Как ребята сказали проиндексируй ВТ. |
|||
25
Simod
18.04.19
✎
08:04
|
Трэш какой-то...
Использование "... ССЫЛКА ..." позволяет проверить тип ОБЪЕКТА без соединения с таблицей объекта, а ВЫРАЗИТЬ(...) создает соединение для проверки вхождения ДАТА в диапазон. Поэтому, конструкции типа: ВЫРАЗИТЬ(СтоунДоступностьЗаявок.Заявка КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода ... И СтоунДоступностьЗаявок.Заявка ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот идентичны внутреннему соединению ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот КАК ЗаявкаНаСогласованиеАктаВыполненныхРабот ПО СтоунДоступностьЗаявок.Заявка = ЗаявкаНаСогласованиеАктаВыполненныхРабот.Ссылка И ЗаявкаНаСогласованиеАктаВыполненныхРабот.Дата МЕЖДУ &НачалоПериода И &КонецПериода Как сказали ранее, для среза последних следует собрать ВТ объединением трех типов документов и проиндексировать. |
|||
26
xXeNoNx
18.04.19
✎
09:08
|
А расскажите мне что значит:
СрезПоследних( | , | Объект ССЫЛКА Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот | И (ВЫРАЗИТЬ(Объект КАК Документ.ЗаявкаНаСогласованиеАктаВыполненныхРабот).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК бит_ИсторияИзмененияСтатусовОбъектовСрезПоследних |
|||
27
Darych
18.04.19
✎
09:11
|
(25) ну индексация... померить так и так надо)
|
|||
28
xXeNoNx
18.04.19
✎
09:13
|
А шо, нельзя сначала доки получить, а потом сделать отбор срезе?
|
|||
29
xXeNoNx
18.04.19
✎
09:19
|
(23) лишь бы все индексировать...., тут и помимо индексов косяков дохрена
|
|||
30
Glup0sti
18.04.19
✎
09:53
|
(22) если хочется, некоторые условия можно в условия соединения, оптимизатор разберется в порядке применения ограничений
|
|||
31
luter-89
18.04.19
✎
09:56
|
(23) Лишь бы проиндексировать.
Там где надо и там где не надо... |
|||
32
Simod
18.04.19
✎
10:14
|
Да, если собрать таблицу по трем типам документов, то индексация может ничего не дать, т.к. поле будет составного типа. Но попробовать стоит.
|
|||
33
Euguln
18.04.19
✎
11:38
|
(29) см п 1.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |