Имя: Пароль:
1C
 
Есть ли куда оптимизировать запрос?
🠗Ø (Волшебник 14.04.2017 12:48)
,
0 MetalZOne
 
14.04.17
10:46
Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВзаиморасчетыОстатки.Документ,
    |    ВзаиморасчетыОстатки.СуммаОстаток,
    |    ВзаиморасчетыОстатки.Партнер,
    |    ВзаиморасчетыОстатки.Документ.Дата КАК ДокументДата
    |ИЗ
    |    РегистрНакопления.Взаиморасчеты.Остатки(
    |            &Дата,
    |            Партнер = &Партнер
    |                И Документ <> &Пуст) КАК ВзаиморасчетыОстатки
    |
    |УПОРЯДОЧИТЬ ПО
    |    ДокументДата";
    Запрос.УстановитьПараметр("Дата", Док.Ссылка.МоментВремени());
    Запрос.УстановитьПараметр("Пуст", Неопределено);
    Запрос.УстановитьПараметр("Партнер",Док.Партнер);

Есть ли куда оптимизивать запрос? Если есть то как?)
1 ptiz
 
14.04.17
10:47
(0) Долго работает?
2 MetalZOne
 
14.04.17
10:50
(1) Сам запрос нет, но он у меня в цикле (делается закрытие доков по фифо). Так вот выбираются записи в три раза дольше чем записываются через НаборЗаписей.
3 vi0
 
14.04.17
10:53
напиши измерения регистра с порядком как в базе
4 mkalimulin
 
14.04.17
10:53
(2) Вот и вынеси его наверх и будет тебе оптимизация.
5 MetalZOne
 
14.04.17
10:55
Измерения
--Документ (индексировать, тип составной)
--Партнер (не индексировать, тип справочник)
Ресурсы
--Сумма
6 MetalZOne
 
14.04.17
10:57
(4) Это ж документы, которые закрываются по ФИФО, как я его вынесу, у меня голова лопнет...
7 mkalimulin
 
14.04.17
10:59
(6) От дерева с одним уровнем еще ни у кого не лопнула.
8 DailyLookingOnA Sunse
 
14.04.17
10:59
(6)
Если &Дата в цикле всегда одинаковое значение, то нужно выносить из цикла.
9 brznzglwgn
 
14.04.17
11:00
Как минимум можно оптимизировать в параметрах обращения через точку -
Док.Ссылка.
Док.Партнер
10 mkalimulin
 
14.04.17
11:00
(7) т.е. с двумя. Опять от нуля подсчитал))
11 b_ru
 
14.04.17
11:01
Просто проверь, не будет ли быстрее если отбор по партнеру и документу убрать из параметров. Учитывая, что результат джоина линкуется с таблицей документов (Документ.Дата) почти наверняка будет.
12 MetalZOne
 
14.04.17
11:01
(8) Разное, в зависимости от документа. Я их массово перепровожу. 85000 доков -два дня перепроводятся. Нужно чтоб в ночь укладывались
13 vi0
 
14.04.17
11:05
(5) плохо для оптимальности что документ у тебя первым измерением и ты отбираешь по неравенству - индекс скорее всего не будет использоваться в сочетании с условием по партнеру
14 Sammo
 
14.04.17
11:07
ВзаиморасчетыОстатки.Документ.Дата - там документы одного вида? Иначе вызывается неявное левое со всеми типами.
Если массовая обработка, как вариант - убрать цикл и сделать временной табличкой собирать нужные документы, после этого считать
15 Lys
 
14.04.17
11:07
ВзаиморасчетыОстатки.Документ.Дата - если Документ составного типа, то будет тормозить из-за неявных соединений.
  
Порядок измерений вызывает сомнения. Кажется, в практике чаще нужны остатки расчетов с выбранным партнером по всем документам, чем наоборот. Здесь, кстати, пример подтверждает это.
  
Отбор по непустому документу - тоже странный. Кажется следствием плохо продуманной архитектуры. Здесь лучше изменить логику конфы, чтобы не было в регистре пустых документов. Если невозможно - то отсекать остатки с пустыми документами при постобработке.
16 MetalZOne
 
14.04.17
11:09
Вот скрин проблемы http://savepic.ru/13524575.png
(15) Пустой документ получается когда идет предоплата, в этот момент еще не ясно какой док. отгрузки закрывать
17 MetalZOne
 
14.04.17
11:11
(14) тип составной
18 DrShad
 
14.04.17
11:11
сделай уже ФИФО прямо в запросе
19 Вафель
 
14.04.17
11:13
(5) поменяй местами партнер и документ
20 Вафель
 
14.04.17
11:14
(16) 0.74% - это проблема????
21 MetalZOne
 
14.04.17
11:15
(20) да, в итоге две секунды на документ
22 Вафель
 
14.04.17
11:16
(21) а больше всего что занимает?
23 Вафель
 
14.04.17
11:17
или 0.74% = 2с, тогда 100% = 250с?
У вас документ проводится 250 секунд?
24 DailyLookingOnA Sunse
 
14.04.17
11:20
И зачем документ перепроводить?
Если меняется только один регистр, только набор записей этого регистра и нужно перезаписать.
25 MetalZOne
 
14.04.17
11:22
(24) так и делаю
26 АнализДанных
 
14.04.17
11:24
(0) Пересчёт итогов делал?
27 arsik
 
гуру
14.04.17
11:24
(25) Считай фифо сразу в запросе. Вот тут методика описана
http://catalog.mista.ru/public/68225/
28 MetalZOne
 
14.04.17
11:30
(27) да это не обычное фифо, у меня есть приход денег в момент, когда еще нечего закрывать (преоплата), потом отгрузки сами себя по фифо закрывают
29 MetalZOne
 
14.04.17
11:48
Вопрос снят, основное время затрачивалось на вызов сервера для отображение состояния выполнения:
Состояние("Проводим "+Стр.Док+"",(тек*100)/всего,"Номер док "+тек+"");
Теперь 0,10 сек. на документ
30 X Leshiy
 
14.04.17
12:09
(29) Оборжаться :)
31 Aleksandr N
 
14.04.17
12:36
(29) Наберут на работу невменяемых любителей писать запросы в цикле, а потом ноют, что у них все плохо.
32 lodger
 
14.04.17
12:46
(31) заметьте, он запрос из цикла так и не убрал...
33 Вафель
 
14.04.17
12:46
(32) а зачем, если на 1 документ - 1 запрос
34 Волшебник
 
модератор
14.04.17
12:48
да уж...