|
Оптимизировать левое соединение | ☑ | ||
---|---|---|---|---|
0
RHCP
06.12.13
✎
12:19
|
Имеется документ с ТЧ:
Контрагент-----Период----------Сумма Иванов---------01.01.2013------100 Иванов---------01.02.2013------200 Иванов---------01.03.2013------300 Петров---------01.01.2013------10 Петров---------01.03.2013------30 .. период - всегда начало месяца текущего года. нужно получить таблицу: Контрагент--------Январь---------Февраль----------Март-----.. Иванов------------100------------200--------------300---.. Петров------------10-------------0----------------30----.. и тд вот код запроса: ВЫБРАТЬ РАЗЛИЧНЫЕ ТЧ.контрагент КАК Контрагент Поместить РазличныеКонтрагенты ИЗ Док.мояТЧ КАК ТЧ ГДЕ ТЧ.Ссылка = &ССылка ; Выбрать РазличныеКонтрагенты.Контрагент ТЧЯнварь.Сумма КАК СуммаЯнварь, ТЧФевраль.Сумма КАК СуммаФевраль, ТЧМарт.Сумма КАК СуммаМарт ИЗ РазличныеКонтрагенты КАК РазличныеКонтрагенты Левое соединение Документ.МойДок.МояТЧ КАК ТЧЯнварь ПО РазличныеКонтрагенты.контрагент = ТЧЯнварь.Контрагент И (ТЧЯнварь.период = &ПериодЯнварь) Левое соединение Документ.МойДок.МояТЧ КАК ТЧФевраль ПО РазличныеКонтрагенты.контрагент = ТЧФевраль.Контрагент И (ТЧФевраль.период = &ПериодФевраль) Левое соединение Документ.МойДок.МояТЧ КАК ТЧМарт ПО РазличныеКонтрагенты.контрагент = ТЧМарт.Контрагент И (ТЧМарт.период = &ПериодМарт) .. В этом коде есть одна ошибка - нет соединения по ссылке. Сейчас документ в базе один и дублей нет и запрос работает быстро. Но стоит добавить в каждое соединение условие " И (ТЧмесяц.Ссылка = &Ссылка) " как выполнение сильно запроса замедляется. и если первоначальный вариант выполняется за десятые доли секунды, то с соединением по ссылке - несколько десятков секунд. Как добавить соединение по ссылке, чтобы запрос не тормозил? Использовать временные/вложенные таблицы на каждый месяц не хотелось бы, тогда запрос получится вообще монструозным.. |
|||
1
Господин ПЖ
06.12.13
✎
12:21
|
заменить на юнионы
|
|||
2
RHCP
06.12.13
✎
12:23
|
(1) это что?
|
|||
3
МойКодУныл
06.12.13
✎
12:24
|
(3) гугл переводчик говорит, что объединения. Но что имел ввиду(1) знает только он.
|
|||
4
RHCP
06.12.13
✎
12:32
|
ну что, никто не поможет?
И почему вообще соединение по ссылке так замедляет выборку? |
|||
5
Галахад
гуру
06.12.13
✎
12:37
|
А не проще через
Выбор Когда период = &Январь Тогда сумма иначе 0 ? |
|||
6
RHCP
06.12.13
✎
12:38
|
(5) вообще без соединений?
не взлетит. в исходной таблице 5 строк, мне нужно оставить 2 |
|||
7
dmpl
06.12.13
✎
12:38
|
(4) Тебе для чего? Если для отчета - то есть СКД...
|
|||
8
Господин ПЖ
06.12.13
✎
12:39
|
>Сейчас документ в базе один и дублей нет и запрос работает быстро
феерия... |
|||
9
RHCP
06.12.13
✎
12:39
|
(7) мне для обработки, не отчет
|
|||
10
МойКодУныл
06.12.13
✎
12:40
|
(8) да, выборка презентабельная.
|
|||
11
Feunoir
06.12.13
✎
12:42
|
(9) Зачем для обработки именно такое представление? Может есть смысл пересмотреть дальнейший алгоритм.
|
|||
12
dmpl
06.12.13
✎
12:42
|
(9) Тогда проще программно преобразовать. Либо использовать ИТОГИ и обход по группировкам. Ну или 12 кусочков по 12 полей выбрать (на каждый месяц, с нулевым значением остальных полей), а потом сгруппировать.
|
|||
13
Господин ПЖ
06.12.13
✎
12:43
|
>вообще без соединений?
будет, но одно и более осмысленное |
|||
14
RHCP
06.12.13
✎
12:44
|
(13) не пойму что ты предлагаешь
|
|||
15
Господин ПЖ
06.12.13
✎
12:45
|
>И почему вообще соединение по ссылке так замедляет выборку?
потому что написано через анус... оптимизатор просто корчится в судорогах наверное... сплошной nested loop |
|||
16
RHCP
06.12.13
✎
12:46
|
(15) предложи рабочий вариант оптимизации
|
|||
17
Господин ПЖ
06.12.13
✎
12:46
|
тут даже юнионы не нужны... периоды разгрести через case и сгруппировать
|
|||
18
Господин ПЖ
06.12.13
✎
12:47
|
(16) уволить тебя нахер...
|
|||
19
RHCP
06.12.13
✎
12:49
|
(17) ну как вариант конешн..ща попробую
|
|||
20
dmpl
06.12.13
✎
12:49
|
(17) Через ВЫБОР строк в запросе больше будет ;)
|
|||
21
RHCP
06.12.13
✎
12:52
|
(20) однозначно.. потому что полей помесячных в реальном документе около 10..
|
|||
22
Галахад
гуру
06.12.13
✎
12:55
|
(6) Гм. А сгруппировать?
|
|||
23
Zero on a dice
06.12.13
✎
12:56
|
(21) а циклу какая разница?
|
|||
24
GANR
06.12.13
✎
12:57
|
(0) Соединение должно быть только одно по условию равенства контрагентов, а в колонках январь - декабрь должно быть
выбор когда месяц = Январь тогда сумма иначе 0 конец КАК Январь, выбор когда месяц = Февраль тогда сумма иначе 0 конец КАК Февраль, ... выбор когда месяц = Декабрь тогда сумма иначе 0 конец КАК Декабрь Понятен смысл? |
|||
25
Жан Пердежон
06.12.13
✎
13:01
|
тебе зачем эта таблица? если только в отчет вывести, то это не так делается...
|
|||
26
WildSery
06.12.13
✎
14:21
|
(0) Запрос в топку. Отчёт делается отчётником.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |