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