![]() |
|
Ускорить запрос | ☑ | ||
---|---|---|---|---|
0
дущ
07.12.11
✎
02:01
|
В 1С:Рознице есть такой вот запрос заполнения регистра ТоваарыВККМ
ВЫБРАТЬ РАЗЛИЧНЫЕ Ном.*, СпрКассы.Ссылка КАК Касса ИЗ ( ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Номенклатура, СпрНоменклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения, ЕСТЬNULL(СпрХарактеристики.Ссылка, СпрНоменклатура.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатуры, СпрНоменклатура.СерияНоменклатуры КАК СерияНоменклатуры ИЗ (ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Ссылка, СпрНоменклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры, &ПустаяСерия КАК СерияНоменклатуры ИЗ Справочник.Номенклатура КАК СпрНоменклатура ГДЕ НЕ СпрНоменклатура.ЭтоГруппа И СпрНоменклатура.Ссылка В (&СписокПоследнейНоменклатуры) {ГДЕ СпрНоменклатура.Ссылка.* КАК Номенклатура} ) КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СпрХарактеристики.Ссылка КАК Ссылка, СпрХарактеристики.Владелец КАК Владелец ИЗ Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики ОБЪЕДИНИТЬ ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка), NULL )КАК СпрХарактеристики ПО СпрХарактеристики.Владелец = СпрНоменклатура.Ссылка ИЛИ СпрХарактеристики.Ссылка = СпрНоменклатура.ХарактеристикаНоменклатуры ) КАК Ном ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КассыККМ КАК СпрКассы ПО СпрКассы.Ссылка В (&КассыККМ) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварыНаККМ КАК ТоварыНаККМ ПО ТоварыНаККМ.Номенклатура = Ном.Номенклатура И ТоварыНаККМ.ХарактеристикаНоменклатуры = Ном.ХарактеристикаНоменклатуры И ТоварыНаККМ.СерияНоменклатуры = Ном.СерияНоменклатуры И ТоварыНаККМ.ЕдиницаИзмерения = Ном.ЕдиницаИзмерения И ТоварыНаККМ.КассаККМ = СпрКассы.Ссылка ГДЕ ТоварыНаККМ.Номенклатура ЕСТЬ NULL И Не Ном.Номенклатура.Набор Собственно основная проблема вот в этом последнем соединении, которое призвано отфильтровать те позиции которые уже имеются в регистре ТоварыНаККМ. В этом регистре уже 50000 записей. При этом запрос выбирает из характеристик номенклатуры эти же 50000 записей. Естественно при их соединении программа висит часами. У кого-какие мысли есть по оптимизации запроса? |
|||
1
Immortal
07.12.11
✎
02:03
|
предлагаю переписать)
|
|||
2
дущ
07.12.11
✎
02:06
|
(1) Весь вопрос - как? :)
Честно говоря, вроде и так запрос верх лаконичности |
|||
3
дущ
07.12.11
✎
02:09
|
Вот это
И СпрНоменклатура.Ссылка В (&СписокПоследнейНоменклатуры) уже я добавил что бы хоть как-нибудь уменьшить выборки по номенклатуре. Но хотелось бы запрос улучшить не уменьшая его подмножества исходных данных. |
|||
4
Immortal
07.12.11
✎
02:17
|
база какая?
|
|||
5
Immortal
07.12.11
✎
02:17
|
файловая, клиент-серверная?
|
|||
6
дущ
07.12.11
✎
02:19
|
файло
|
|||
7
Immortal
07.12.11
✎
02:19
|
посмотри поля, по которым осуществляется соединения таблиц - они все проиндексированы?
|
|||
8
Bober
07.12.11
✎
02:19
|
раз есть такая вещь {ГДЕ СпрНоменклатура.Ссылка.* КАК Номенклатура}, то это какой-то отчет? или обработка? откуда этот запрос и какая версия 1С:Розницы
|
|||
9
Immortal
07.12.11
✎
02:22
|
версия сильно старая..его потом переделали(offline обмен)
|
|||
10
дущ
07.12.11
✎
02:23
|
(7) Это сразу глянул. Естественно нет. Розница - базовая :(
(8) Это обработка. Там построитель используется типа что бы пользователю дать возможность свои отборы в форме заполнения накладывать. |
|||
11
Bober
07.12.11
✎
02:24
|
как я понял это запрос, берется вся номенклатура с детализацией до характеристики, далее результат тупо умножается на количество касс - мега таблица сравнивается со значениями в РС.ТоварыНаККМ
|
|||
12
Bober
07.12.11
✎
02:25
|
это а-ля список того, что мы должны выгрузить на фронтол кассы?
|
|||
13
Immortal
07.12.11
✎
02:25
|
тогда надо сначала поместить результаты первого и второго запросов (данные расчета и данные из базы) во временные таблицы - с фильтрами, проиндексировать эти таблицы и потом уже соединять
|
|||
14
Immortal
07.12.11
✎
02:26
|
ну и по логике посмотреть, может там и не нужно столько всего
|
|||
15
Bober
07.12.11
✎
02:32
|
кусок говна
( ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Номенклатура, СпрНоменклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения, ЕСТЬNULL(СпрХарактеристики.Ссылка, СпрНоменклатура.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатуры, СпрНоменклатура.СерияНоменклатуры КАК СерияНоменклатуры ИЗ ( ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Ссылка, СпрНоменклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры, &ПустаяСерия КАК СерияНоменклатуры ИЗ Справочник.Номенклатура КАК СпрНоменклатура ГДЕ НЕ СпрНоменклатура.ЭтоГруппа И СпрНоменклатура.Ссылка В (&СписокПоследнейНоменклатуры) {ГДЕ СпрНоменклатура.Ссылка.* КАК Номенклатура} ) КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СпрХарактеристики.Ссылка КАК Ссылка, СпрХарактеристики.Владелец КАК Владелец ИЗ Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики ОБЪЕДИНИТЬ ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка), NULL )КАК СпрХарактеристики ПО СпрХарактеристики.Владелец = СпрНоменклатура.Ссылка ИЛИ СпрХарактеристики.Ссылка = СпрНоменклатура.ХарактеристикаНоменклатуры ) КАК Ном смело меняй на (ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Номенклатура, СпрНоменклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения, ЕстьNULL(СпрХарактеристики.Ссылка, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК ХарактеристикаНоменклатуры, ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики ПО СпрНоменклатура.Ссылка = СпрХарактеристики.Владелец {ГДЕ СпрНоменклатура.Ссылка.* КАК Номенклатура}) КАК Ном |
|||
16
дущ
07.12.11
✎
02:35
|
(12) Нет, это мы должны добавить в РС.ТоварыНаККМ. Там для этого и соединение это, что бы типа в РС не добавлять то, что уже там есть.
(13) А вот с пакетным запросом с индексацией - подумаю. Это действительно может дать результат. (14)(15) Да там просто этот текст запроса набирается кусками в зависимости от кучи галочек на форме, поэтому и выглядит так странно. Мне кажется, все эти вложенные запросы не сильно на результат влияют. |
|||
17
Immortal
07.12.11
✎
02:38
|
наверное, да.
ну и не забыть ГДЕ НЕ СпрНоменклатура.ЭтоГруппа |
|||
18
Bober
07.12.11
✎
02:39
|
(16) не сильно, оно и видно в (0) "Естественно при их соединении программа висит часами"
|
|||
19
Immortal
07.12.11
✎
02:40
|
вложенные-влияют, если клиент-серверный вариант - субд может выбрать неоптимальный план запроса, как работает 1с-овский движок, неизвестно.
|
|||
20
Bober
07.12.11
✎
02:42
|
а вообще, сколько в спр номенклатура, в спр характеристики и сколько в КассыККМ.
|
|||
21
дущ
07.12.11
✎
02:49
|
в КассыККМ 50000 в Номенклатуре тыщ 10, в Характеристиках те же 50
|
|||
22
Bober
07.12.11
✎
10:40
|
(21) что это за предприятие с 50000 кассами ккм?
|
|||
23
chingiz
07.12.11
✎
10:44
|
+(22) еще и с файловой базой. По личному опыту - запрос, который еле ворочается на файловой, на скуле выполняется раза в 3 быстрее.
|
|||
24
dk
07.12.11
✎
10:51
|
обычно разбиваю запрос на блоки и отключаю блоки по очереди пока не найду тормоза
или место тормозов определено 100%? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |