| 
    
            
         
         | 
    
  | 
Как исключить выполнение подзапроса из "ОБЪЕДИНИТЬ ВСЕ" | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        LLIaMaH    
     18.08.20 
            ✎
    10:14 
 | 
         
        Общий вопрос про запросы. Может кто знает какую хитрость. Есть объединение запросов. Хочу некоторые запросы исключить из общего запроса при разных настройках и отборах, что бы в интересах производительности исключить в принципе обращение к ненужным данным. Обычно я делал сборку текста запроса из кусков, но это жутко не удобно для отладки и редактирования текста запроса в конструкторе и консоли, не то чтобы я не мог это все сделать просто редактирую текст запроса руками, но хотелось бы что бы текст был одной простыней. Есть ли какой то хитрый хинт который позволял бы это сделать, например передав просто параметр в запрос
 
        Выбрать Т1.Поле1 как Поле ИЗ Т1 Объединить все Выбрать Т2.Поле2 ИЗ Т2 Объединить все Выбрать Т3.Поле3 ИЗ Т3 Как сделать так чтобы текст остался целым, но обращение к Т2 при выполнении запроса не происходило или происходило, но без выборок и прочего, может чего хитрого в ГДЕ написать или еще как.  | 
|||
| 
    1
    
        Ёпрст    
     гуру 
    18.08.20 
            ✎
    10:17 
 | 
         
        ГДЕ Ложь     
         | 
|||
| 
    2
    
        LLIaMaH    
     18.08.20 
            ✎
    10:19 
 | 
         
        (1) А точно сработает? Ну то есть он не пойдет шуровать по базе с проверкой каждой строки на просто ЛОЖЬ.     
         | 
|||
| 
    3
    
        Ёпрст    
     гуру 
    18.08.20 
            ✎
    10:21 
 | 
         
        (2) какой строке ?     
         | 
|||
| 
    4
    
        LLIaMaH    
     18.08.20 
            ✎
    10:28 
 | 
         
        Я просто не понимаю принци работы такогой конструкции, я начитался всякого про оптимизацию и приципы но могу и приврать в своих рассуждениях, скажем если мы выбираем таблицу, ГДЕ нет, СУБД просто помещает всю таблицу в выборку, если ГДЕ есть и отбор по индексированному реквизиту, то выполняется ИндекСеек или ИндекСкан, если в ГДЕ неидексированный реквизит то просто начинается полный скан таблицы, а что происходит в случае если в ГДЕ стоит ЛОЖЬ? Я протестировал на таблице с 10 миллионами документов Консоль показывает какито затраты на запрос но это в пределах погрешности.     
         | 
|||
| 
    5
    
        бомболюк    
     18.08.20 
            ✎
    10:38 
 | 
         
        не нравится ГДЕ Ложь - делай ВЫБРАТЬ ПЕРВЫЕ 0     
         | 
|||
| 
    6
    
        LLIaMaH    
     18.08.20 
            ✎
    10:51 
 | 
         
        (5) не, не пойдет "ВЫБРАТЬ Первые &Кол" не работает, чтобы вставить 0 выходит придется из кусков запрос собирать.
 
        с хинтом в ГДЕ можно так написать: Выбрать Т1.Поле1 как Поле ИЗ Т1 Где Выбор Когда &ОтбиратьДанныеИзТ1 Тогда ИСТИНА Иначе Ложь Конец  | 
|||
| 
    7
    
        LLIaMaH    
     18.08.20 
            ✎
    10:54 
 | 
         
        +(6) ну то есть написать всю простыню в одном месте, тестировать, отлаживать, редактировать в конструкторе, копировать туда сюда удобно, просто добавить установку лишнего параметра в запросе.     
         | 
|||
| 
    8
    
        Жан Пердежон    
     18.08.20 
            ✎
    10:59 
 | 
         
        можно еще со схемой запроса по*работать     
         | 
|||
| 
    9
    
        vde69    
     18.08.20 
            ✎
    11:04 
 | 
         
        где &Флаг1
 
        Если НадоУдалять Тогда ТекстЗапроса = УдалитьСекциюСПараметром("&Флаг1") Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&Флаг1",Истина) КонецЕсли  | 
|||
| 
    10
    
        vi0    
     18.08.20 
            ✎
    11:18 
 | 
         
        (4) как говорится, зависит от
 
        статья от 2017 про разные субд https://javarush.ru/groups/posts/331-kljevihe-optimizacii-sql-ne-zavisjajshie-ot-stoimostnoy-modeli-chastjh-2  | 
|||
| 
    11
    
        Жан Пердежон    
     18.08.20 
            ✎
    11:36 
 | 
         
        (10) немного мимо - там про константы в первой части и вроде как все оптимизаторы справляются     
         | 
|||
| 
    12
    
        Ёпрст    
     гуру 
    18.08.20 
            ✎
    11:59 
 | 
         
        (4) меньш читай всякого. открой уже qa и посмотри реальный план выполнения данного запроса, 0ms если че, на табличке в 132 млн     
         | 
|||
| 
    13
    
        Конструктор1С    
     18.08.20 
            ✎
    12:12 
 | 
         
        (9) а зачем удалять? Достаточно в параметрах установить Ложь или Истина     
         | 
|||
| 
    14
    
        Конструктор1С    
     18.08.20 
            ✎
    12:13 
 | 
         
        (2) сработает     
         | 
|||
| 
    15
    
        rudnitskij    
     18.08.20 
            ✎
    12:56 
 | 
         
        (6) <code>Выбрать Т1.Поле1 как Поле ИЗ Т1
 
        Где &ОтбиратьДанныеИзТ1</code> и зачем там выбор? В параметр истину или ложь передавайте  | 
|||
| 
    16
    
        LLIaMaH    
     18.08.20 
            ✎
    17:35 
 | 
         
        (15) да это сокращенная версия случая когда вместо ИСТИНА отбор какой то вставляется     
         | 
|||
| 
    17
    
        vi0    
     18.08.20 
            ✎
    17:51 
 | 
         
        (11) чето я не понял тебя
 
        кто мимо чего?  | 
|||
| 
    18
    
        Жан Пердежон    
     18.08.20 
            ✎
    18:49 
 | 
         
        (17) то что спрашивал (4) в первой части обзора и как раз для этого случая (constant scan) все оптимизаторы ведут себя примерно одинаково;
 
        у тебя же ссылка на вторую часть, а там в WHERE уже не совсем константа  | 
|||
| 
    19
    
        vi0    
     18.08.20 
            ✎
    19:27 
 | 
         
        (18) ТС спрашивал про ГДЕ ложь, по ссылке рассматриваются т.н. бессмысленные условия типа WHERE 1 = 1
 
        и я не пойму что ты несешь  | 
|||
| 
    20
    
        Жан Пердежон    
     18.08.20 
            ✎
    19:52 
 | 
         
        (19) ну прочитай еще раз что ли, там они как раз НЕ рассматриваются, а упоминаются     
         | 
|||
| 
    21
    
        youalex    
     18.08.20 
            ✎
    23:42 
 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |