|
Конструкция ВЫБОР в предложении ГДЕ | ☑ | ||
---|---|---|---|---|
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) Оптимизатор "умный", поэтому разницы нет
Условие зависит не от строк а от внешнего параметра - вычисляется один раз а не для каждой строки |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |