Имя: Пароль:
1C
 
Оптимизация запроса
0 Shmidt
 
07.08.14
13:48
В КА наваял вот такой запрос:

ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Свойство,
    ЗначенияСвойствОбъектов.Значение
ПОМЕСТИТЬ ЗначенияСвойств
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Контрагенты
    И ЗначенияСвойствОбъектов.Свойство.Наименование ПОДОБНО "%источник%"
;

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

УПОРЯДОЧИТЬ ПО
    Контрагент

Данные выбирает правильно и все бы ничего, но выполняется 6,5 минут. В принципе пользователям могу сказать, что так положено, сидите, ждите, но самому интересно насколько можно его оптимизировать. Есть у кого какие идеи?
1 Fragster
 
гуру
07.08.14
13:49
Выразить(ЗначенияСвойствОбъектов.Свойство КАК Справочник.Контрагенты ).Наименование
2 Fragster
 
гуру
07.08.14
13:50
кстативто еще:

ВЫБРАТЬ
    Выразить(ЗначенияСвойствОбъектов.Объект КАК Справочник.Контрагенты ) КАК Объект,
3 Fragster
 
гуру
07.08.14
13:51
ПродажиОбороты.Контрагент = ЗначенияСвойств.Объект
4 GreatOne
 
07.08.14
13:51
а все из-за ПОДОБНО разве? Может ПродажиОбороты тоже в ВТ, а потом уже левым?
5 Fragster
 
гуру
07.08.14
13:51
в случае с таким запросом еще может быть имеет смысл обращаться к реальной таблице а не к оборотам
6 Classic
 
07.08.14
13:51
И вот здесь

ПО ПродажиОбороты.Контрагент.Ссылка = ЗначенияСвойств.Объект.Ссылка

Слово ссылка убрать нафиг
7 Fragster
 
гуру
07.08.14
13:51
.ссылка надо везде убрать
8 GreatOne
 
07.08.14
13:53
кстати, а что это такое: РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ), а потом  ГДЕ
    ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
. Я тут учусь, а не советую, если что)
9 Fragster
 
гуру
07.08.14
13:53
(8) это (5)
10 Shmidt
 
07.08.14
14:00
(2) С этим понятно, но вот почему (1) должно быть типа Справочник.Контрагент?
11 Fragster
 
гуру
07.08.14
14:34
(10) выражай в тот тип, которого оно там у тебя, если это составной тип.
12 DmitriyDI
 
07.08.14
14:36
(8) отбор по типу документа
13 Shmidt
 
07.08.14
14:37
(11) Ага, разоборался. Спасибо. С учетом изменений время выполнения запроса 20 - 30 сек!!!
14 DmitriyDI
 
07.08.14
14:39
(13) это подобно так медленно работал ?
15 Shmidt
 
07.08.14
14:42
(13) Наверно и .ссылка ну и в реальными таблицами
16 Fragster
 
гуру
07.08.14
15:02
(15) результат-то  покажи
17 SeiOkami
 
07.08.14
15:08
(0), выбери сначала свойства с нужным наименованием, помести в ВТ, а потом по ним отбирай значения
18 Shmidt
 
07.08.14
15:11
(16) ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.Контрагенты) КАК Объект,
    ЗначенияСвойствОбъектов.Свойство,
    ЗначенияСвойствОбъектов.Значение
ПОМЕСТИТЬ ЗначенияСвойств
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство.Наименование ПОДОБНО "%источник%"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.Контрагент КАК Контрагент,
    Продажи.Номенклатура,
    Продажи.Контрагент.ЮрФизЛицо КАК ЮрФизЛицо,
    Продажи.Регистратор.АдресДоставки КАК АдресДоставки,
    Продажи.Количество,
    Продажи.Стоимость,
    Продажи.Период КАК Дата,
    Продажи.Регистратор.Ответственный КАК Оператор,
    ЗначенияСвойств.Значение КАК ИсточникПривлечения
ИЗ
    РегистрНакопления.Продажи КАК Продажи
        ПОЛНОЕ СОЕДИНЕНИЕ ЗначенияСвойств КАК ЗначенияСвойств
        ПО Продажи.Контрагент = ЗначенияСвойств.Объект
ГДЕ
    Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
    И Продажи.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
19 Shmidt
 
07.08.14
15:12
Время выполнения 20 - 30 сек. При условии, что таблица Продажи большая, т.к. реализаций очень много, против 6,5 минут в (0)
20 Shmidt
 
07.08.14
15:12
Юзеры довольны, я тоже морально удовлетворен. Спасибо всем за советы!
21 DmitriyDI
 
07.08.14
15:14
(19) а если еще сгруппировать перед тем как соединять ВТ ? не будет побыстрее? или там уникальные все поля?
22 RomanYS
 
07.08.14
15:15
интересно как повлияет на время выполения добавление индекса в первую таблицу
23 Shmidt
 
07.08.14
15:16
(21) Не к чему. Там потом еще группировки/сортировки СКД вертеть, поэтому во-избежание коллизий не стоит
24 SeiOkami
 
07.08.14
15:18
Вот мой вариант, сделанный в блокноте, поэтому может на чтось поругаться)

ВЫБРАТЬ
    СвойстваОбъектов.Ссылка КАК Свойство
ПОМЕСТИТЬ ВТ_Свойства
ИЗ
    ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
ГДЕ
    СвойстваОбъектов.Наименование ПОДОБНО "%источник%"

;

ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Свойство,
    ЗначенияСвойствОбъектов.Значение
ПОМЕСТИТЬ ЗначенияСвойств
ИЗ
    ВТ_Свойства КАК ВТ_Свойства ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ПО     
    ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Контрагенты И ЗначенияСвойствОбъектов.Свойство = ВТ_Свойства.Свойство

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ПродажиОбороты.Контрагент.Ссылка КАК Контрагент,
    ПродажиОбороты.Номенклатура.Ссылка КАК Номенклатура,
    ПродажиОбороты.Контрагент.ЮрФизЛицо КАК ЮрФизЛицо,
    ПродажиОбороты.Контрагент.ОсновнойАдресДоставки КАК АдресДоставки,
    ПродажиОбороты.КоличествоОборот КАК Количество,
    ПродажиОбороты.СтоимостьОборот КАК Стоимость,
    ПродажиОбороты.Период КАК Дата,
    ПродажиОбороты.Регистратор.Ответственный КАК Оператор,
    ЗначенияСвойств.Значение КАК ИсточникПривлечения

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

УПОРЯДОЧИТЬ ПО
    Контрагент
25 SeiOkami
 
07.08.14
15:18
+Проиндексировать
26 RomanYS
 
07.08.14
15:31
(24) в условиях виртуальных таблиц нельзя использовать регистратор
27 Fragster
 
гуру
07.08.14
15:33
Выразить(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Ответственный
28 Fragster
 
гуру
07.08.14
15:33
ну и адрес также
29 SeiOkami
 
07.08.14
15:34
(26), так и думал, но проверить не мог)