Имя: Пароль:
1C
1С v8
Очень долго обрабатывается запрос
0 Steynvor
 
03.07.14
16:00
Всем доброго времени суток!
1С:Предприятие 8.1 (8.1.15.14), самописная, не мной.
Запрос выполняется по 2-10 минут, уже не понимаю что ему надо, может кто подскажет. Все тормозит на РезультатЗапроса = Запрос.Выполнить(); :

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    ВводПутевогоЛистаСменыВПутевомЛисте.Ссылка.ГаражныйНомер КАК ГаражныйНомер,
|    ВводПутевогоЛистаСменыВПутевомЛисте.Водитель.Код КАК ТабельныйНомер,
|    ВводПутевогоЛистаСменыВПутевомЛисте.Водитель,
|    ВводПутевогоЛистаСменыВПутевомЛисте.Маршрут,
|    ВводПутевогоЛистаСменыВПутевомЛисте.График
|ИЗ
|    Документ.ВводПутевогоЛиста.СменыВПутевомЛисте КАК ВводПутевогоЛистаСменыВПутевомЛисте
|ГДЕ
|    ВводПутевогоЛистаСменыВПутевомЛисте.Ссылка.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
|    И ВводПутевогоЛистаСменыВПутевомЛисте.Кондуктор = &Кондуктор
|    И ВводПутевогоЛистаСменыВПутевомЛисте.Ссылка.СтадияОбработки = ЗНАЧЕНИЕ(Перечисление.СтадииОбработкиПутевогоЛиста.Выдан)
|
|УПОРЯДОЧИТЬ ПО
|    ВводПутевогоЛистаСменыВПутевомЛисте.НомерСмены";
Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(РабочаяДата));
Запрос.УстановитьПараметр("ОкончаниеПериода", КонецДня(РабочаяДата));
Запрос.УстановитьПараметр("Кондуктор", Кондуктор);
РезультатЗапроса = Запрос.Выполнить();
1 Fragster
 
гуру
03.07.14
16:02
сначала отбери все документы, а потом уже к ним присоедини отбор по кондруктору во внутреннем соединении. кстати плохо работать с документами, тем более без проверки на проведенность. правильно писать нужные данные в регистр и делать запрос к нему напрямую.
2 Steynvor
 
03.07.14
16:03
Я только недавно начал работать с запросами 1С, поэтому можно объяснение как для чайника?
3 Dionisious
 
03.07.14
16:03
Переиндексация спасет. Ну или переход на 8.3.
4 Dionisious
 
03.07.14
16:04
База файловая?
5 Steynvor
 
03.07.14
16:05
Нет, не файловая
6 anatoly
 
03.07.14
16:05
база файловая или серверная?
+1 к варианту (1)
7 Steynvor
 
03.07.14
16:06
(6) база серверная
8 Fragster
 
гуру
03.07.14
16:09
Выбрать Ссылка Поместить Доки Из Документ.ВводПутевогоЛиста Где Дата Между ... И СтадияОбработки = ... ;

Выбрать * Из Доки Внутреннее соединение Документ.ВводПутевогоЛиста.СменыВПутевомЛисте КАК Смены По Доки.Ссылка = Смены.Ссылка И Смены.Кондуктор = &Кондуктор
9 floody
 
03.07.14
16:10
на SQL регламенты делаются?
10 Steynvor
 
03.07.14
16:10
(9) нет, я очень большой чайник (((
11 Dionisious
 
03.07.14
16:12
Тогда точно переиндексация и обновление статистики. И на поле Кондуктор индексирование поставь.
12 Aloex
 
03.07.14
16:13
Убери упорядочивание.
13 Dionisious
 
03.07.14
16:14
О упорядочивание - еще индексацию на поле НомерСмены.
14 Fragster
 
гуру
03.07.14
16:15
(13) чего уж мелочиться - на всё индексы пусть ставит. а потом будет все тормозить
15 H A D G E H O G s
 
03.07.14
16:15
(11) "И на поле Кондуктор индексирование поставь."

Зачем?
16 H A D G E H O G s
 
03.07.14
16:16
(13) Зачем?
17 Fragster
 
гуру
03.07.14
16:16
(16) недостаточно индексов, нужно больше индексов (это все голосом террановской тетки из старкрафта)
18 H A D G E H O G s
 
03.07.14
16:16
Уровень грамотности 1Снегов зашкаливает. Тормозит - ставь индекс, хренли...
19 acsent
 
03.07.14
16:18
(18) как раз тут индекс очень даже в тему
20 Steynvor
 
03.07.14
16:19
(19) Как это написать?
21 Fragster
 
гуру
03.07.14
16:19
(19) а я бы на неактуальность статистики грешил, или еще чего-то. ведь запрос по логике должен в подобие (8) сам превратиться, только вот почему-то не превращается
22 H A D G E H O G s
 
03.07.14
16:21
(19) Этот индекс войдет в состав кластерного индекса?
23 acsent
 
03.07.14
16:23
(22) нет, а почему должен то?
24 H A D G E H O G s
 
03.07.14
16:23
(19) Для табличной части есть кластерный индекс по ссылке и номеру строки. Войдет ли в него поле "Кондуктор" или будет создан отдельный некластерный индекс, который, скорее всего, будет "хуже" кластерного и никогда не используется.
25 Dionisious
 
03.07.14
16:24
Собственно я и писал сначала индексирование, обновление статистики, потом если не поможет попробовать индексы на поля отбора и упорядочивания.
26 H A D G E H O G s
 
03.07.14
16:24
(23) В тех книге эксперта ничего нет про табличные части объектов, вот я и спрашиваю, а проверять - лениво.
27 acsent
 
03.07.14
16:24
(24) в данной задаче будет всегда использоваться
28 acsent
 
03.07.14
16:25
а индекс по ссылке в запросе (0) как раз и не используется
29 H A D G E H O G s
 
03.07.14
16:25
(27) Там left join по ссылке с основной таблицей.
30 H A D G E H O G s
 
03.07.14
16:32
(28) Чей-то? Вообще, конечно, зависит от периода.
Попадет в период мало документов - селективность будет достаточна и будет табличная часть отбираться по кластерному индексу (indexseek), будет много документов - эээээ, - хз -

indexseek по "Кондуктор" + keylookup ?
31 H A D G E H O G s
 
03.07.14
16:33
Запутался.
32 acsent
 
03.07.14
16:33
(29) по ссылке от основной таблицы, а не от таблицы тч
33 acsent
 
03.07.14
16:34
Если бы внутренне было соединение, тогда сиквел бы выбрал сам какая таблица основная. а тут левое.
Поэтому тэйбл скан + лукап
34 H A D G E H O G s
 
03.07.14
16:35
(33) Проверишь?
35 Fragster
 
гуру
03.07.14
16:35
началось гадание, а (8) решило все проблемы...
36 Fragster
 
гуру
03.07.14
16:35
(35)+ хотя и его можно улучшить, сделав сразу внутреннее без временной таблицы
37 acsent
 
03.07.14
16:39
(34) А что проверять. И так все понятно.
Фрагстер прав. Нужно ручками развернуть соединение и сделать внутреннее