|
Оптимизация запроса по табчастям реализации | ☑ | ||
---|---|---|---|---|
0
Roman Igorevich
18.04.13
✎
11:08
|
ВЫБРАТЬ
РеализацияТоваровУслугУслуги.Номенклатура КАК Номенклатура, СУММА(РеализацияТоваровУслугУслуги.Сумма) КАК Сумма, СУММА(РеализацияТоваровУслугУслуги.СуммаНДС) КАК СуммаНДС, РеализацияТоваровУслугУслуги.Ссылка КАК Документ ИЗ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги ГДЕ РеализацияТоваровУслугУслуги.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца И РеализацияТоваровУслугУслуги.Ссылка.Проведен = ИСТИНА И ВЫБОР КОГДА &Номенклатура ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ РеализацияТоваровУслугУслуги.Номенклатура = &Номенклатура КОНЕЦ И ВЫБОР КОГДА &НоменклатурнаяГруппа ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ РеализацияТоваровУслугУслуги.Номенклатура.НоменклатурнаяГруппа = &НоменклатурнаяГруппа КОНЕЦ СГРУППИРОВАТЬ ПО РеализацияТоваровУслугУслуги.Номенклатура, РеализацияТоваровУслугУслуги.Ссылка Как ускорить/оптимизировать запрос? По сотням документов работает пол минуты... |
|||
1
ДенисЧ
18.04.13
✎
11:09
|
индексацию по полям поставь...
|
|||
2
Лефмихалыч
18.04.13
✎
11:10
|
(0)
1. удалить его нахрен 2. Написать правильно 3. PROFIT! |
|||
3
sapphire
18.04.13
✎
11:11
|
(0)
И РеализацияТоваровУслугУслуги.Ссылка.Проведен = ИСТИНА И ВЫБОР КОГДА &Номенклатура ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ РеализацияТоваровУслугУслуги.Номенклатура = &Номенклатура КОНЕЦ И ВЫБОР КОГДА &НоменклатурнаяГруппа ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ РеализацияТоваровУслугУслуги.Номенклатура.НоменклатурнаяГруппа = &НоменклатурнаяГруппа КОНЕЦ Бред |
|||
4
sapphire
18.04.13
✎
11:11
|
(2) Согласен
|
|||
5
Roman Igorevich
18.04.13
✎
11:12
|
Результат - документы, сгруппированные по номенклатуре.
(1) Если без изменений конфигурации? |
|||
6
sapphire
18.04.13
✎
11:12
|
(1) Что даст индекс по полю "Проведен"?
Даже если оный включить насильно в кластерный ндекс селективность по этому полю будет плохая. |
|||
7
sapphire
18.04.13
✎
11:13
|
(5) Научись писать запросы правильно.
|
|||
8
ДенисЧ
18.04.13
✎
11:13
|
(6) А причём тут Проведен? У него много других условий.
|
|||
9
Лефмихалыч
18.04.13
✎
11:13
|
вот такого в табличной части быть не может
КОГДА &Номенклатура ЕСТЬ NULL ТОГДА ИСТИНА И ВЫБОР КОГДА &НоменклатурнаяГруппа ЕСТЬ NULL |
|||
10
Maxus43
18.04.13
✎
11:13
|
>>Результат - документы, сгруппированные по номенклатуре.
в одном документе всё равно только одна строка с конкретной номенклатурой, зачем группировать вобще? |
|||
11
Roman Igorevich
18.04.13
✎
11:16
|
(3) (9)
Это проверка установки отбора, параметры устанавливаются перед компоновкой результата СКД. Как иначе? (10) У нас в одном документе может быть несколько строк разных услуг. |
|||
12
sapphire
18.04.13
✎
11:16
|
(8) Ага, куча неявных и ненужных join-ов
|
|||
13
sapphire
18.04.13
✎
11:17
|
(11) Ты не знаешь как СКД работает с отборами?
|
|||
14
Maxus43
18.04.13
✎
11:17
|
(11) разных, а не одинаковых
|
|||
15
Roman Igorevich
18.04.13
✎
11:19
|
(13)
Пользователь устанавливает отбор либо но номенклатуре, либо по номенклатурной группе (либо то, либо то). Я реализовал так. Как лучше? Параметр = КомпоновщикНастроекДанных.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Номенклатура")); Если ЗначениеЗаполнено(Отчет.Номенклатура) И ТипЗнч(Отчет.Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда Параметр.Значение = Отчет.Номенклатура; Иначе Параметр.Значение = NULL; КонецЕсли; Параметр.Использование = Истина; Параметр = КомпоновщикНастроекДанных.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НоменклатурнаяГруппа")); Если ЗначениеЗаполнено(Отчет.Номенклатура) И ТипЗнч(Отчет.Номенклатура) = Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда Параметр.Значение = Отчет.Номенклатура; Иначе Параметр.Значение = NULL; КонецЕсли; Параметр.Использование = Истина; |
|||
16
Roman Igorevich
18.04.13
✎
11:21
|
(14) Не понял
|
|||
17
Maxus43
18.04.13
✎
11:23
|
(16) группировать не надо, вот и всё
|
|||
18
Roman Igorevich
18.04.13
✎
11:25
|
(17) Ошибка получения информации набора данных
по причине: Ошибка в запросе набора данных по причине: {(2, 2)}: Поле не входит в группу "РеализацияТоваровУслугУслуги.Номенклатура" <<?>>РеализацияТоваровУслугУслуги.Номенклатура КАК Номенклатура, |
|||
19
GANR
18.04.13
✎
11:26
|
Вот из-за этого
ГДЕ ... ВЫБОР КОГДА &Номенклатура ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ РеализацияТоваровУслугУслуги.Номенклатура = &Номенклатура КОНЕЦ И ВЫБОР КОГДА &НоменклатурнаяГруппа ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ РеализацияТоваровУслугУслуги.Номенклатура.НоменклатурнаяГруппа = &НоменклатурнаяГруппа КОНЕЦ индексы идут лесом! |
|||
20
Maxus43
18.04.13
✎
11:26
|
(18) на закладке группировка надо всё вычистить
|
|||
21
Maxus43
18.04.13
✎
11:27
|
вобще конечно это не очень сильно влияет, надо переделывать Выбор когда...
|
|||
22
Roman Igorevich
18.04.13
✎
11:28
|
ВЫБРАТЬ
РеализацияТоваровУслугУслуги.Номенклатура КАК Номенклатура, СУММА(РеализацияТоваровУслугУслуги.Сумма) КАК Сумма, СУММА(РеализацияТоваровУслугУслуги.СуммаНДС) КАК СуммаНДС, РеализацияТоваровУслугУслуги.Ссылка КАК Документ ИЗ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги ГДЕ РеализацияТоваровУслугУслуги.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца И РеализацияТоваровУслугУслуги.Ссылка.Проведен = ИСТИНА СГРУППИРОВАТЬ ПО РеализацияТоваровУслугУслуги.Номенклатура, РеализацияТоваровУслугУслуги.Ссылка Удалить вообще условия, на которые все так ругаются на форуме. Не увидел ни капли ускорения формирования. |
|||
23
Roman Igorevich
18.04.13
✎
11:29
|
(20) Я когда удаляю с закладки - она снова эти строки вставляет. Когда удаляю вручную - возникает ошибка.
|
|||
24
palpetrovich
18.04.13
✎
11:30
|
(15) открой для себя "В ИЕРАРХИИ (&Номенклатура)"
|
|||
25
Maxus43
18.04.13
✎
11:30
|
(23) СУММА( - тоже надо удалять.
(22) да потому что тяни из регистра оборотного вобще, а не из документов |
|||
26
Лефмихалыч
18.04.13
✎
11:31
|
(22) сколько документов и строк в ТЧ?
|
|||
27
Roman Igorevich
18.04.13
✎
11:32
|
(25) Точно! Заметил уже! А насчет регистра - если так дело пойдет, так и сделаю. Переделываю отчет из 2.0 чужой, там было по документам, решил не разбираться зачем такое условие сделали - хотел повторить.
|
|||
28
GANR
18.04.13
✎
11:36
|
(22) А если попробовать это
ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка ПОМЕСТИТЬ НужныеДокументы ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ РеализацияТоваровУслуг.Проведен И РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаКонца ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РеализацияТоваровУслугУслуги.Ссылка КАК Документ, РеализацияТоваровУслугУслуги.Номенклатура КАК Номенклатура, СУММА(РеализацияТоваровУслугУслуги.Сумма) КАК Сумма, СУММА(РеализацияТоваровУслугУслуги.СуммаНДС) КАК СуммаНДС ИЗ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги ГДЕ РеализацияТоваровУслугУслуги.Ссылка В (ВЫБРАТЬ а.Ссылка ИЗ НужныеДокументы КАК а) И РеализацияТоваровУслугУслуги.Номенклатура = &Номенклатура И РеализацияТоваровУслугУслуги.Номенклатура.НоменклатурнаяГруппа = &НоменклатурнаяГруппа СГРУППИРОВАТЬ ПО РеализацияТоваровУслугУслуги.Номенклатура, РеализацияТоваровУслугУслуги.Ссылка |
|||
29
Maxus43
18.04.13
✎
11:38
|
(28) если доков много - проиндексировать можно ещё, я обычно соединение юзаю, вложенные запросы могут дать неправильный план. Тут замерять надо
|
|||
30
GANR
18.04.13
✎
11:42
|
А если вот так?
ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка КАК Ссылка ПОМЕСТИТЬ НужныеДокументы ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ РеализацияТоваровУслуг.Проведен И РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаКонца ИНДЕКСИРОВАТЬ ПО Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Номенклатура.Ссылка ПОМЕСТИТЬ НоменклатураПоГруппе ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка = &Номенклатура И Номенклатура.НоменклатурнаяГруппа = &НоменклатурнаяГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РеализацияТоваровУслугУслуги.Ссылка КАК Документ, РеализацияТоваровУслугУслуги.Номенклатура КАК Номенклатура, СУММА(РеализацияТоваровУслугУслуги.Сумма) КАК Сумма, СУММА(РеализацияТоваровУслугУслуги.СуммаНДС) КАК СуммаНДС ИЗ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги ГДЕ РеализацияТоваровУслугУслуги.Номенклатура В (ВЫБРАТЬ а.Ссылка ИЗ НоменклатураПоГруппе КАК а) И РеализацияТоваровУслугУслуги.Ссылка В (ВЫБРАТЬ а.Ссылка ИЗ НужныеДокументы КАК а) СГРУППИРОВАТЬ ПО РеализацияТоваровУслугУслуги.Номенклатура, РеализацияТоваровУслугУслуги.Ссылка |
|||
31
Рыжий Лис
18.04.13
✎
11:43
|
(0) Переписать запрос на получение данных из регистра продажи.
|
|||
32
Roman Igorevich
18.04.13
✎
11:47
|
(26) Итого без отбора за пол минуты формирует около ~2500 документов сгруппированных по ~30 номенклатурам/ном.группам. В каждом доке от 1 до 3 услуг.
|
|||
33
Roman Igorevich
18.04.13
✎
11:48
|
(31)
В регистре Реализация нет номенклатуры, только ном.группа. В регистре НДС Продажи нет инфы по номенклатуре. |
|||
34
GANR
18.04.13
✎
11:50
|
(33) запросы из (28)(30) дают что-нибудь????
|
|||
35
Roman Igorevich
18.04.13
✎
11:52
|
Сейчас тестирую
|
|||
36
Roman Igorevich
18.04.13
✎
11:59
|
(34)
Запрос из (28) офигенно работает! Это то что нужно, спасибо большое! Подправил только условия номенклатуры и ном.группы под те, на которые все ругаются (ВЫБОР, Есть Null и т.д.) - т.к. пользователю в основном нужно без отбора формировать. 2500 документов обработаны за 5 секунд! |
|||
37
Roman Igorevich
18.04.13
✎
12:04
|
(34) Готов символически отблагодарить, написал на e-mail
|
|||
38
GANR
18.04.13
✎
12:09
|
(37) Хотел написать: если (30) не поможет - разбей пакет запросов на разные запросы и замерь время каждого из подзапросов - задача будет локализована. Примерно так: http://ximage.ru/data/imgs/1366272523.jpg.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |