Имя: Пароль:
1C
1С v8
Конструкция ВЫБОР в предложении ГДЕ
0 slafor
 
23.08.23
14:13
В статьях 1С нашёл такую рекомендацию: если в запросе используется предложение ГДЕ, а в ней - конструкция ВЫБОР, то она должна стоять после основного условия, как дополнительное. Например: не ГДЕ ВЫБОР КОГДА..., а ГДЕ Таблица1.Реквизит1 = &Реквизит1 И ВЫБОР КОГДА...
А что, если основное условие не нужно, можно ли вместо него использовать банальную отсебятину - ну типа ГДЕ ИСТИНА И ВЫБОР КОГДА..., поможет ли это для улучшения быстродействия запроса?

Дело в том, что у нас в динамических списках используются такие произвольные запросы, и выполняются они очень уж медленно.
1 Волшебник
 
23.08.23
14:15
чем сложнее выражение, тем интереснее его вычислять
2 Donkey_hot
 
23.08.23
14:15
(0) Не поможет
3 OldCondom
 
23.08.23
14:18
Сперва надо понять, почему запрос медленно выполняется, а потом уже исправлять.
4 unenu
 
23.08.23
14:18
(0) в ветке
ВЫБОР Когда условие1 Тогда....
Когда условие2 Тогда...
Когда ... Тогда

условие1 должно быть более вероятным и, главное, более простым чем условие2 и т.д.
5 AlexeyKh
 
23.08.23
14:22
Это все рекомендации

(и даже следуя всем рекомендациям можно с успехом писать отличные говно..запросы)
6 dmt
 
23.08.23
14:33
(0) не поможет, т.к. согласно рекомендации 1с:
"Основное условие – это то, что позволяет ограничить объем выборки больше других условий и его составляющие объединены по И."
https://its.1c.ru/db/v8std/content/658/hdoc

т.е. цель рекомендации - ограничить объем выборки, причем используя индексы

Быстрый способ проверки: попробуй закомментить свое многоуровневое условие в ГДЕ, и смотри на результат. Возможно тормоза в другом месте
7 Мультук
 
23.08.23
14:42
(0)

Следуя это логике

ГДЕ ИСТИНА И ИСТИНА И ВЫБОР КОГДА...,  -- гораздо лучше, а
ГДЕ ИСТИНА И ИСТИНА И ИСТИНА И ВЫБОР КОГДА...,  -- гораздо лучше, -- вообще Агонь

P.S.
Это сарказм
8 unenu
 
23.08.23
14:54
если тормоз именно "выбор когда"
то можно от него избавиться с помощью

ОБЪЕДИНИТЬ ВСЕ

т.е. на каждое "Когда условиеN Тогда" просто продублировать текст запроса
с простым ГДЕ условиеN
9 lodger
 
23.08.23
15:03
(0) показывай уже своё "ГДЕ"
10 slafor
 
26.08.23
20:52
А вот если конструкция ВЫБОР КОГДА... используется только для того, чтобы отобрать данные в соответствии с заранее установленными значениями - будет ли это тормозить запрос, или нет?

Поясню: есть параметры запроса - &ВыводитьВсе, &ВыводитьПоАвтору, в остальных случаях выводить только документы по основной организации текущего пользователя. В первом случае мы должны видеть в результате ВСЕ документы, во втором - только те, у которых параметр Автор соответствует текущему пользователю.

И в условии пишется так:
<...>
ГДЕ ВЫБОР КОГДА &ВыводитьВсе
     ТОГДА ИСТИНА
    КОГДА &ВыводитьПоАвтору
     ТОГДА Документ1.Автор = &Автор
    ИНАЧЕ Документ1.Организация = &Организация
КОНЕЦ

Все параметры условия задаются в модуле формы списка, в проц. ПриСозданииНаСервере.

Сначала была мысль подменить там основной запрос на свой, в котором текст запроса будет зависеть от этих условий, и в нем не будет использоваться сочетание условия ГДЕ и конструкции ВЫБОР КОГДА..., но особых изменений в производительности не увидел. Может, в данном случае эта конструкция не влияет на скорость выполнения запроса?
11 Garykom
 
26.08.23
21:07
(10) Оптимизатор "умный", поэтому разницы нет
Условие зависит не от строк а от внешнего параметра - вычисляется один раз а не для каждой строки
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан