Имя: Пароль:
1C
1С v8
Оптимизация запроса
0 FFrr1C
 
08.12.22
22:15
Есть простейший запрос для УТ 11

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

уходит в стопор, что не так делаю парни?
1 Волшебник
 
08.12.22
22:18
не надо .Ссылка
2 FFrr1C
 
08.12.22
22:19
там реализации основания для поручения экспедитору ссылки, а реализации имеют максимум по одному доп сведению
3 FFrr1C
 
08.12.22
22:20
в начале?
4 Ryzeman
 
08.12.22
22:21
Всё.

ВЫБРАТЬ РАЗЛИЧНЫЕ
ПоручениеЭкспедиторуОснования.Основание КАК Ссылка
ПОМЕСТИТЬ ВТ_Основания
Документ.ПоручениеЭкспедитору.Основания КАК ПоручениеЭкспедиторуОснования
ГДЕ
ПоручениеЭкспедиторуОснования.Ссылка = &Ссылка;

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


Попробуй и кайфани
5 Ryzeman
 
08.12.22
22:22
Если у тебя заполнение допссведений не принудительное, то вместо внутреннего соединения сделай левое и обработай правильно NULL
6 Ryzeman
 
08.12.22
22:23
ВЫБРАТЬ РАЗЛИЧНЫЕ
ПоручениеЭкспедитору.Основание КАК Ссылка
ПОМЕСТИТЬ ВТ_Основания
ИЗ
Документ.ПоручениеЭкспедитору КАК ПоручениеЭкспедитору
ГДЕ
ПоручениеЭкспедитору.Основание = &Ссылка;

Просмотрел первый блок)
7 FFrr1C
 
08.12.22
22:24
Я понял, спасибо,но просто .ссылку убрал и 0,012с выполнение!
8 Ryzeman
 
08.12.22
22:24
Ну и что бы вообще классно работало - проверь есть ли индекс на основаниях. Можешь построить средствами СУБД если умеешь.
9 FFrr1C
 
08.12.22
22:26
Индекса нет, но это не железный повод уходить в стопорт
в чем прикол не понятно.. в чем разница ПоручениеЭкспедитору.Основание и ПоручениеЭкспедитору.Основание.Ссылка?
10 vicof
 
08.12.22
22:28
(9) Посмотри выполняемые запросы на sql-сервере и посмотри разницу
11 Ryzeman
 
08.12.22
22:28
(9) Посмотри план запроса. Когда ты делаешь ссылка.ссылка внутренним (если не левым) привязываются все таблицы которые там могут быть в первой ссылке.
12 FFrr1C
 
08.12.22
22:33
а конкретно "ссылка.ссылка внутренним (если не левым) привязываются все таблицы" - это конкретно где в исходном запросе получается неправильно?
13 FFrr1C
 
08.12.22
22:33
там соединений нет
14 vicof
 
08.12.22
22:34
(13) ну-ну.
15 FFrr1C
 
08.12.22
22:35
Понял вас! соединения в скуле если составнойТип.Ссылка,
Спасибо!
16 FFrr1C
 
08.12.22
22:37
"Если в запросе используется получение значения через точку от поля составного ссылочного типа, то при выполнении этого запроса будет выполняться соединение со всеми таблицами объектов, входящими в этот составной тип. В результате SQL текст запроса чрезвычайно усложняется, и при его выполнении оптимизатор СУБД может выбрать неоптимальный план. Это может привести к серьезным проблемам производительности и даже к неработоспособности запроса в отдельных случаях."
17 magicSan
 
09.12.22
07:11
различные работает дольше чем группировка
18 mikecool
 
09.12.22
10:01
(17) да ну? чем докажешь?
19 arsik
 
гуру
09.12.22
10:21
+(18) Я тоже всегда считал, что группировка тяжелее
20 Курцвейл
 
09.12.22
10:26
(17) Это абсолютно одинаковые инструкции для сервера.
21 magicSan
 
09.12.22
10:43
(18) берешь запрос с миллионом записей и смотришь в консоли

(19) см. выше

(20) disitinct и group by ?
22 Курцвейл
 
09.12.22
14:07
(21) Да
23 Курцвейл
 
09.12.22
14:11
(21) Речь конечно о ситуации когда результат  disitinct или group by не будут отличаться. Оптимизатор запроса понимает что ему требуется и по сути будет генерировать и там и там одинаковый план запроса.