|
Неоптимальный запрос. Посоветуйте как оптимизировать. | ☑ | ||
---|---|---|---|---|
0
DIvanmgn
04.10.11
✎
12:35
|
Запрос.Текст ="ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Объект, | ЗначенияСвойствОбъектов.Значение |ПОМЕСТИТЬ ВТ_ПНТЗ |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Свойство = &Свойство | |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | атлМестаХраненияСрезПоследних.Номенклатура, | атлМестаХраненияСрезПоследних.МестоХранения |ПОМЕСТИТЬ ВТ_МестоХранения |ИЗ | РегистрСведений.атлМестаХранения.СрезПоследних( | &ДатаДокумента, | | ) КАК атлМестаХраненияСрезПоследних |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ИнвентаризацияТоваровНаСкладе.Номер, | ИнвентаризацияТоваровНаСкладе.Дата, | ИнвентаризацияТоваровНаСкладе.Организация, | ИнвентаризацияТоваровНаСкладе.Склад.Представление КАК ПредставлениеСклада, | ИнвентаризацияТоваровНаСкладе.Организация КАК Организация1, | ИнвентаризацияТоваровНаСкладе.Склад, | ИнвентаризацияТоваровНаСкладе.Товары.( | НомерСтроки, | Номенклатура, | ЕстьNull(ВТ_ПНТЗ.Значение,Номенклатура.Код) КАК КодАртикул, | Номенклатура.НаименованиеПолное КАК Товар, | Количество КАК Количество, | КоличествоУчет КАК КоличествоПоУчету, | Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения, | Цена, | Сумма, | СуммаУчет КАК СуммаПоУчету, | ВТ_МестоХранения.МестоХранения | ) |ИЗ | Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_МестоХранения КАК ВТ_МестоХранения | ПО ИнвентаризацияТоваровНаСкладе.Товары.Номенклатура = ВТ_МестоХранения.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПНТЗ КАК ВТ_ПНТЗ | ПО ИнвентаризацияТоваровНаСкладе.Товары.Номенклатура = ВТ_ПНТЗ.Объект |ГДЕ | ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент | |УПОРЯДОЧИТЬ ПО | ИнвентаризацияТоваровНаСкладе.Товары.НомерСтроки"; Используется для вывода печатной формы инвентаризации. На 900 позициях форма формируется больше часа. Где можно оптимизировать? Пробовал параметром передавать в виртуальные таблицы отбор по позициям - в результате "Не хватает памяти". Где то слышал, что отбор работает дольше чем соединение. |
|||
1
chelentano
04.10.11
✎
12:37
|
(0) имхо, проблема в том, как ты выбираешь табличную часть
|
|||
2
DIvanmgn
04.10.11
✎
12:39
|
(1) да, меня тоже это смущает. Но вообще взял этот кусок из типовой. Неужели сами разработчики пишут неоптимальные запросы?
|
|||
3
Asmody
04.10.11
✎
12:39
|
отбор по позициям как делал?
|
|||
4
Jstunner
04.10.11
✎
12:39
|
(0) "форма формируется больше часа"
а запрос сколько? |
|||
5
DIvanmgn
04.10.11
✎
12:41
|
(3) список из элементов справочника "номенклатура"
передавал в качестве параметра |
|||
6
DIvanmgn
04.10.11
✎
12:41
|
(4) не засекал, чуть позже будет информация
|
|||
7
Asmody
04.10.11
✎
12:41
|
(5) сложи номенклатуру из ТЧ во временную таблицу, а потом отбирай по ней
|
|||
8
chelentano
04.10.11
✎
12:43
|
(2) я не знаю как они там пишут, сам недавно переделывал, сделал шапку одним запросом, ТЧ другим
|
|||
9
unregistered
04.10.11
✎
12:46
|
(2) Соединяют временные таблицы (ВТ)_ПНТЗ и ВТ_МестоХранения) с вложенными таблицами (Товары) тоже разработчики? Или это твое соединение?
|
|||
10
zak555
04.10.11
✎
12:48
|
зачем в запросе шапка текДока ?
|
|||
11
Kuein
04.10.11
✎
12:48
|
Жутковато выглядит.
1. Вначале номенклатуру из инвентаризации во временную таблицу, и уже к ней цепляй свойства объектов и места хранения. 2. | ИнвентаризацияТоваровНаСкладе.Номер, | ИнвентаризацияТоваровНаСкладе.Дата, | ИнвентаризацияТоваровНаСкладе.Организация, | ИнвентаризацияТоваровНаСкладе.Склад.Представление КАК ПредставлениеСклада, | ИнвентаризацияТоваровНаСкладе.Организация КАК Организация1, | ИнвентаризацияТоваровНаСкладе.Склад, Зачем вот это все? 3. Запросы к табличным частям документа ТАК лучше не писать. Долго, неудобно и обычно бессмысленно. |
|||
12
acsent
04.10.11
✎
12:50
|
Зачем свойства в ВТ запихал? Напрочь убил идею использования индекса
|
|||
13
Kuein
04.10.11
✎
12:52
|
(12) А можно по-подробнее?
Я тоже не очень понимаю что ТС хотел сказать первой временной таблицей, но вот про индексы даже не подумал. |
|||
14
Эстет хренов
04.10.11
✎
12:57
|
не используй временные таблицы, тут они не нужны.
|
|||
15
DIvanmgn
04.10.11
✎
12:57
|
(4) не получилось замерить потому что идея (7) помогла
в итоге форма появляется за минуту с небольшим. |
|||
16
mikeA
04.10.11
✎
12:57
|
а накуа там вообще временные таблицы? я их конечно тоже люблю, но не до такой же степени.
> Пробовал параметром передавать в виртуальные таблицы отбор по позициям - в результате "Не хватает памяти". параметры компьютера озвучь. файловый/SQL и т.п. может просто памяти добавить и проц пошустрее? |
|||
17
DIvanmgn
04.10.11
✎
13:01
|
(12) пошел учить МЧ про индексы
(14) понимаю что понимать когда надо когда нет получится с опытом, но может подскажете где об этом толково написано? (16) база файловая, сервер приемлемо справляется с типовыми задачами.. вот только на моем коде споткнулся :) |
|||
18
dimaldinho
04.10.11
✎
13:26
|
(0)
1. Максимально сократить число записей в соединяемых таблицах: в первые две временные таблицы добавить отбор по номенклатуре. 2. ИнвентаризацияТоваровНаСкладе поместить во временную таблицу, наложив отбор Ссылка = &ТекущийДокумент, и только потом делать левые соединения. 3. Если прогнозируешь, что 3 таблицы будут большими, добавть во временные таблицы индексирование по полям соединения. off: 4. А если в ТЧ инвентарицазии будут дубли строк? |
|||
19
Axel2009
04.10.11
✎
13:34
|
а сколько выполняется запрос
ВЫБРАТЬ * ИЗ Документ.ИнвентаризацияТоваров.Товары ГДЕ Ссылка = &ТекущийДокумент ? |
|||
20
unregistered
04.10.11
✎
13:44
|
Что-то тип атого должно быть:
ВЫБРАТЬ ИнвентаризацияТоваровНаСкладеТовары.Ссылка.Номер, ИнвентаризацияТоваровНаСкладеТовары.Ссылка.Дата, ИнвентаризацияТоваровНаСкладеТовары.Ссылка.Организация, ИнвентаризацияТоваровНаСкладеТовары.Ссылка.Склад.Представление КАК ПредставлениеСклада, ИнвентаризацияТоваровНаСкладеТовары.Ссылка.Организация КАК Организация1, ИнвентаризацияТоваровНаСкладеТовары.Ссылка.Склад, ИнвентаризацияТоваровНаСкладеТовары.НомерСтроки, ИнвентаризацияТоваровНаСкладеТовары.Номенклатура, ИнвентаризацияТоваровНаСкладеТовары.Номенклатура.НаименованиеПолное КАК Товар, ИнвентаризацияТоваровНаСкладеТовары.Количество КАК Количество, ИнвентаризацияТоваровНаСкладеТовары.КоличествоУчет КАК КоличествоПоУчету, ИнвентаризацияТоваровНаСкладеТовары.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения, ИнвентаризацияТоваровНаСкладеТовары.Цена, ИнвентаризацияТоваровНаСкладеТовары.Сумма, ИнвентаризацияТоваровНаСкладеТовары.СуммаУчет КАК СуммаПоУчету, ЕстьNull(ВТ_ПНТЗ.Значение, ИнвентаризацияТоваровНаСкладеТовары.Номенклатура.Код) КАК КодАртикул, ВТ_МестоХранения.МестоХранения ИЗ Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК ИнвентаризацияТоваровНаСкладеТовары ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.атлМестаХранения.СрезПоследних(&ДатаДокумента,) КАК ВТ_МестоХранения ПО ИнвентаризацияТоваровНаСкладеТовары.Номенклатура = ВТ_МестоХранения.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект, ЗначенияСвойствОбъектов.Значение ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Свойство = &Свойство) КАК ВТ_ПНТЗ ПО ИнвентаризацияТоваровНаСкладеТовары.Номенклатура = ВТ_ПНТЗ.Объект ГДЕ ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент УПОРЯДОЧИТЬ ПО ИнвентаризацияТоваровНаСкладе.Товары.НомерСтроки |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |