|
Как ускорить выполнение запроса. | ☑ | ||
---|---|---|---|---|
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
|
||||
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) Артур. где результат тестирования?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |