Имя: Пароль:
1C
1С v8
Как ускорить выполнение запроса.
,
0 ArturR
 
04.08.16
09:23
Привет всем.
Хочу услышать ваше предложение/мнение по следующему вопросу.
Есть такой запрос:

ВЫБРАТЬ
    УчетИмуществаОстатки.Номенклатура.Ссылка КАК Номенклатура,
    УчетИмуществаОстатки.КоличествоОстаток КАК Количество,
    УчетИмуществаОстатки.Номенклатура.Номер КАК Номер,
    УчетИмуществаОстатки.Номенклатура.КарточкаУчета.Наименование КАК КарточкаУчета,
    УчетИмуществаОстатки.Номенклатура.НомерИнвентарный КАК НомерИнвентарный
ИЗ
    РегистрНакопления.УчетИмущества.Остатки(&ПараметрПериод, ) КАК УчетИмуществаОстатки
ГДЕ
    УчетИмуществаОстатки.Сотрудник.Ссылка = &Сотрудник
    И УчетИмуществаОстатки.Номенклатура.Служба.Ссылка = &Служба

УПОРЯДОЧИТЬ ПО
    УчетИмуществаОстатки.Номенклатура.КарточкаУчета.Наименование

По сути запрос простейший. Просто выбирает остатки. Однако время затрачивает 6-7 секунд, что по моему разумению неприлично много для справочника 3000+ элементов.

Работаю в файловом режиме, локально.
1 Горогуля
 
04.08.16
09:24
отбор по измерениям - в параметры ВТ
2 piter3
 
04.08.16
09:25
а ты посмотри на скуле во что превращается и поймешь.
убрать где, УчетИмуществаОстатки.Номенклатура.Номер КАК Номер,
    УчетИмуществаОстатки.Номенклатура.КарточкаУчета.Наименование КАК КарточкаУчета,
    УчетИмуществаОстатки.Номенклатура.НомерИнвентарный КАК НомерИнвентарный
3 ArturR
 
04.08.16
09:28
(1) ??
(2) ?? что это такое - скула?
4 piter3
 
04.08.16
09:28
(3) sql server
5 ArturR
 
04.08.16
09:28
(1) подробней если не сложно
6 piter3
 
04.08.16
09:29
консоль запросов используй
7 ArturR
 
04.08.16
09:29
(3) серьезно? для простейшей конфигурации такую махину разворачивать
8 ArturR
 
04.08.16
09:30
(4) серьезно? для простейшей конфигурации такую махину разворачивать
9 piter3
 
04.08.16
09:30
(7) тогда верь на слово.каюсь не заметил,что файловая
10 Горогуля
 
04.08.16
09:31
11 Lexey_
 
04.08.16
09:32
+ лишние ".Ссылка" убрать
12 ArturR
 
04.08.16
09:32
(10) понял. Сейчас попробую.
13 Горогуля
 
04.08.16
09:33
ещё можно заранее поискать нужную номенклатуру, сложить в ВТ, проиндексировать, а потом уже проверять на Номенклатура в (выбрать Номенклатура из ВТ)
14 ArturR
 
04.08.16
09:37
(11) Это я пробовал. Да запрос выполняется 2 сек. Но я так понял что необходимо будет искать выбранный пользователем элемент.

Этот вариант я пока держу как резерв.
15 mkalimulin
 
04.08.16
09:37
Для начала попробуй заменить

УчетИмуществаОстатки.Сотрудник.Ссылка = &Сотрудник
    И УчетИмуществаОстатки.Номенклатура.Служба.Ссылка = &Служба

на

УчетИмуществаОстатки.Сотрудник = &Сотрудник
    И УчетИмуществаОстатки.Номенклатура.Служба = &Служба
16 Lexey_
 
04.08.16
09:40
(14) что-что искать?
17 piter3
 
04.08.16
09:41
(16) ну отборы наверное
18 ArturR
 
04.08.16
09:48
(16) Отобранные элементы потом выгружаются на форму для выбора пользователем. Если не будет готовой ссылки мне нужно будет искать выбранный элемент в справочнике самому.
Или я что-то не так думаю?
19 ArturR
 
04.08.16
09:48
(15) прирост есть правда не очень существенный, но хоть что-то
20 Lexey_
 
04.08.16
09:50
(18) а почему бы тогда побольше Ссылок написать, что б уж наверняка? ".Ссылка.Ссылка.Ссылка.Ссылка".
УчетИмуществаОстатки.Номенклатура - это уже ссылка
21 ArturR
 
04.08.16
09:53
(20) Согласен. Убрал.
22 ArturR
 
04.08.16
09:55
Расшифруйте мне это понятие "посмотри на скуле во что превращается" (2)
23 piter3
 
04.08.16
09:58
(22) На скуле можно увидеть во что реально превращается твой запрос.И в (0) превратиться в подзапросы.
24 ArturR
 
04.08.16
10:03
А-а-а! Понял! SQL.
25 ArturR
 
04.08.16
10:05
(23) Я в такие дебри боюсь залазить. Есть опасения что не асилю. Мозгов не хватит. Хотя нутром понимаю рано или поздно прийдется
26 piter3
 
04.08.16
10:05
(25) так поэтому тебе и насоветовали.реализуй и будет счастье
27 ArturR
 
04.08.16
10:09
(26) :)
28 sash-ml
 
04.08.16
10:11
(13) " Номенклатура в (выбрать Номенклатура из ВТ)" не нужно так делать, дешевле выбрать все остатки и внутреннее соединение с ВТ сделать
29 ArturR
 
04.08.16
10:15
ВЫБРАТЬ
    УчетИмуществаОстатки.Номенклатура КАК Номенклатура,
    УчетИмуществаОстатки.Номенклатура.Код КАК Код,
    УчетИмуществаОстатки.КоличествоОстаток КАК Количество,
    УчетИмуществаОстатки.Номенклатура.Номер КАК Номер,
    УчетИмуществаОстатки.Номенклатура.КарточкаУчета.Наименование КАК КарточкаУчета,
    УчетИмуществаОстатки.Номенклатура.НомерИнвентарный КАК НомерИнвентарный
ИЗ
    РегистрНакопления.УчетИмущества.Остатки(
            &ПараметрПериод,
            Сотрудник = &Сотрудник
                И Номенклатура.Служба = &Служба) КАК УчетИмуществаОстатки
                
УПОРЯДОЧИТЬ ПО
    УчетИмуществаОстатки.Номенклатура.КарточкаУчета.Наименование

Сделал вот так - выполнение 5-6 сек.
30 Горогуля
 
04.08.16
10:17
(29) а теперь без упорядочить
31 ArturR
 
04.08.16
10:18
(30) пробовал буквально чуть-чуть быстрее
32 IlyaSR
 
04.08.16
10:19
(29) 5-6 секунд - это в консоли запросов??? или это вместе с выводом результата куда-нибудь???
33 IlyaSR
 
04.08.16
10:21
Каково количество записей данного регистра???
34 break
 
04.08.16
10:21
напиши как измерения в регистре идут по порядку
35 ArturR
 
04.08.16
10:22
(32) в консоли
36 ArturR
 
04.08.16
10:27
(33) (34) Измерений 2.
1. Сотрудник
2. Номенклатура

http://pics.rsh.ru/img/1_gh2jnhdb.jpg
37 ArturR
 
04.08.16
10:31
Реально быстрее только если убрать

УчетИмуществаОстатки.Номенклатура КАК Номенклатура

т.е. ссылочный тип

3-4 сек.
38 Тихий омут
 
04.08.16
10:34
Мож я сильно не прав буду, но сдаётся, что использование в параметрах виртуальной таблицы такой конструкции Номенклатура.Служба = &Служба может тормозить. Что зубры скажут по этому поводу?
39 ArturR
 
04.08.16
10:35
(28) а поподробней можно?
40 ArturR
 
04.08.16
10:37
(38) ща попробую. Я вот только что про это подумал.
Может нужно будет измерение добавить "Служба" для ускорения
41 IlyaSR
 
04.08.16
10:38
Посмотрел у себя "Чистое время выполнения запроса" увеличилось в 3 раза с 0,7 до 3 секунд, всего лишь из-за того, что добавил ".Наименование"

время 0,7 сек

ВЫБРАТЬ
    ИзделияНаКомиссииОстатки.Изделие,
    ИзделияНаКомиссииОстатки.КоличествоОстаток,
    ИзделияНаКомиссииОстатки.ВесОстаток,
    
ИЗ
    РегистрНакопления.ИзделияНаКомиссии.Остатки(&Дата, ) КАК ИзделияНаКомиссииОстатки

время 3 сек

ВЫБРАТЬ
    ИзделияНаКомиссииОстатки.Изделие,
    ИзделияНаКомиссииОстатки.КоличествоОстаток,
    ИзделияНаКомиссииОстатки.ВесОстаток,
    ИзделияНаКомиссииОстатки.Изделие.Наименование
ИЗ
    РегистрНакопления.ИзделияНаКомиссии.Остатки(&Дата, ) КАК ИзделияНаКомиссииОстатки


Количество выбранных более 150000
42 Тихий омут
 
04.08.16
10:39
(39) в виртуальной таблице твоего регистра нет такого поля Служба, и создаваемый план запроса получается очень неоптимальным, что-нибудь вроде многократного сканирования физических таблиц регистра и номенклатуры. Кстати, в (23) ведь и сказали, что нужно смотреть результирующий запрос, но это только в скуле. Почитай на эту тему "Настольная книга эксперта по технологическим вопросам", там есть про это.
43 PRO100 NigGaZ
 
04.08.16
10:40
(41) Изделение какой тип?
44 Мимохожий Однако
 
04.08.16
10:41
Попробуй первым запросом во временной таблице получить остатки. Вторым запросом взять справочник с отбором по номенклатуре из временной таблице и соединить со справочником Номенклатура и справочником Карточка учета
45 Мимохожий Однако
 
04.08.16
10:42
(42)Ссылка на книжку есть?
46 IlyaSR
 
04.08.16
10:42
(43) СправочникСсылка
47 break
 
04.08.16
10:42
сколько времени выполняется след запрос?

ВЫБРАТЬ
    УчетИмуществаОстатки.Номенклатура КАК Номенклатура,
Поместить ВТ
ИЗ
    РегистрНакопления.УчетИмущества.Остатки(
            &ПараметрПериод,
            Сотрудник = &Сотрудник
) КАК УчетИмуществаОстатки
48 break
 
04.08.16
10:44
а пересчет итогов вообще ведется?
49 PRO100 NigGaZ
 
04.08.16
10:44
(46) т.е. изделием может быть любой справочник? Тогда все ясно, в конечном запросе левые соединения со всеми справочниками
50 IlyaSR
 
04.08.16
10:45
(49) Нет - это ссылка на конкретный справочник Справочник.Изделия
51 IlyaSR
 
04.08.16
10:47
Так же не забываем, что работа идет в файловом варианте, что очень тормозит выборки

в файловом варианте запрос с 0,7 сек увеличился до 13 сек
52 b_ru
 
04.08.16
10:49
Вот так будет чуть получше

ВЫБРАТЬ

    тНоменклатура.Ссылка КАК Номенклатура,
    тНоменклатура.Код КАК Код,
    УчетИмуществаОстатки.КоличествоОстаток КАК Количество,
    тНоменклатура.Номер КАК Номер,
    тНоменклатура.КарточкаУчета.Наименование КАК КарточкаУчета,
    тНоменклатура.НомерИнвентарный КАК НомерИнвентарный

ИЗ

    РегистрНакопления.УчетИмущества.Остатки(
            &ПараметрПериод,
            Сотрудник = &Сотрудник) КАК УчетИмуществаОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК тНоменклатура
ПО УчетИмуществаОстатки.Номенклатура = тНоменклатура.Ссылка
ГДЕ
    тНоменклатура.Служба = &Служба

                
УПОРЯДОЧИТЬ ПО
    тНоменклатура.КарточкаУчета.Наименование


Для совсем хорошо нужно убрать обращения через две точки, засунуть оставшееся во вложенный запрос, а потом к нему явно приджойнить КарточкуУчета

P.S. ТС, это очень не простейший вопрос. Подучи SQL
53 ArturR
 
04.08.16
13:00
Всем спасибо.

Использую вот этот

ВЫБРАТЬ
    УчетИмуществаОстатки.Номенклатура КАК Номенклатура,
    УчетИмуществаОстатки.КоличествоОстаток КАК Количество
ИЗ
    РегистрНакопления.УчетИмущества.Остатки(
            &ПараметрПериод,
            Сотрудник = &Сотрудник
                И Номенклатура.Служба = &Служба) КАК УчетИмуществаОстатки

УПОРЯДОЧИТЬ ПО
    УчетИмуществаОстатки.Номенклатура.КарточкаУчета.Наименование

с (52) практически никакой разницы по времени, но чуток быстрее.

Как я понял основная проблема это все же файловый режим работы.
54 ovrfox
 
04.08.16
13:34
(53) Стоит попробовать проиндекировать реквизит Служба у номенклатуры.
+ Стоит попробовать изменить запрос на
ВЫБРАТЬ
    УчетИмуществаОстатки.Номенклатура КАК Номенклатура,
    УчетИмуществаОстатки.КоличествоОстаток КАК Количество
ИЗ
    РегистрНакопления.УчетИмущества.Остатки(
            &ПараметрПериод,
            Сотрудник = &Сотрудник
                И Номенклатура в (Выбрать Ном.Ссылка из Справочник.Номенклатура как Ном где Ном.Служба = &Служба)) КАК УчетИмуществаОстатки

УПОРЯДОЧИТЬ ПО
    УчетИмуществаОстатки.Номенклатура.КарточкаУчета.Наименование
55 мистер игрек
 
04.08.16
13:46
(53)
1. У тебя измерения случайно не составного типа?
2. Реквизит "Служба" номенклатуры индекированный?
56 ArturR
 
04.08.16
13:48
(55)
1. нет
2. нет.

Сейчас буду пробовать индексировать
57 мистер игрек
 
04.08.16
13:48
3. Итоги рассчитаны до текущей даты?
58 ArturR
 
04.08.16
13:49
3. нет
59 ovrfox
 
04.08.16
16:37
(0) Артур. где результат тестирования?