|   |   | 
| 
 | как правильно в Запросе? ↓ (Волшебник 07.09.2022 12:43) | ☑ | ||
|---|---|---|---|---|
| 0
    
        DES 05.09.22✎ 15:56 | 
        с точки зрения быстродействия
 ГДЕ Док.Проведен И Док.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) И КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ) или ГДЕ Док.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) И КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ) И Док.Проведен Проведен - точно индексируется в SQL и Дата - тоже? тогда без разницы? | |||
| 1
    
        Волшебник 05.09.22✎ 15:56 | 
        Отбор по периоду важнее     | |||
| 2
    
        grasshoper 07.09.22✎ 10:11 | 
        я всегда первыми ставлю условия отсекающие большую часть записей. понятное дело что в 98% случаев документ проведен, а в период он может не попасть.     | |||
| 3
    
        Kassern 07.09.22✎ 10:13 | 
        (0) правильнее ВиртуальнаяТаблцица(&НачалоПериода,&КонецПериода)     | |||
| 4
    
        RomaH naïve 07.09.22✎ 10:30 | 
        И Док.Дата >= НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) 
 И Док.Дата <= КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ) | |||
| 5
    
        НафНаф 07.09.22✎ 10:31 | 
        "Проведен - точно индексируется в SQL" - зачем индексировать булево значение?     | |||
| 6
    
        Святой Нос 07.09.22✎ 11:00 | 
        (2) > я всегда первыми ставлю условия
 Ты хочешь сказать, что "Условие1 И Условие2" работает иначе, чем "Условие2 И Условие1" | |||
| 7
    
        Святой Нос 07.09.22✎ 11:01 | 
        ?     | |||
| 8
    
        RomaH naïve 07.09.22✎ 11:04 | 
        (6) а то - по И - если первое условие ложь, то второе не выполняется (не расчитывается)     | |||
| 9
    
        Святой Нос 07.09.22✎ 11:10 | 
        (8) А вот Microsoft почему-то пишет, что "The order of evaluation of logical operators can vary depending on choices made by the query optimizer" - https://docs.microsoft.com/ru-ru/sql/t-sql/queries/search-condition-transact-sql?view=sql-server-ver15
 Как так-то? | |||
| 10
    
        DEVIce 07.09.22✎ 11:11 | 
        Я думаю что без разницы, скуль сам поставит поток как надо.     | |||
| 11
    
        Kassern 07.09.22✎ 11:12 | 
        (9) +1 
 SQL в общем случае - это декларативный язык. Вы говорите что хотите получить, но не говорите как. СУБД сама решает, как именно получать ваши данные. | |||
| 12
    
        RomaH naïve 07.09.22✎ 11:13 | 
        странно
 если я пишу так: Где А/0 > 0 И Ложь - в ошибку Где Ложь И А/0 > 0 - нет ошибки | |||
| 13
    
        Kassern 07.09.22✎ 11:15 | 
        (12) Попробуйте на большой таблице сделать отбор с парой условий "И", а потом поменяйте их местами и сравните время выполнения.     | |||
| 14
    
        Kassern 07.09.22✎ 11:15 | 
        все это проверяется за пару минут     | |||
| 15
    
        Святой Нос 07.09.22✎ 11:22 | 
        (12) Ты вообще не там воюешь.
 ВЫБРАТЬ 10 КАК Поле1 ПОМЕСТИТЬ Времянка; ВЫБРАТЬ * ИЗ Времянка ГДЕ Поле1/0 > 0 И ЛОЖЬ; | |||
| 16
    
        Ryzeman 07.09.22✎ 11:24 | 
        (15) SQL умнеее программистов)     | |||
| 17
    
        RomaH naïve 07.09.22✎ 15:08 | 
        (16) это только кажется
 ВЫБРАТЬ 10 КАК Поле1 ПОМЕСТИТЬ втТаблица ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втТаблица.Поле1 КАК Поле1 ИЗ втТаблица КАК втТаблица ГДЕ ЛОЖЬ ИЛИ (втТаблица.Поле1 > 5 И 10 / (Поле1 - 5) > 0) //ИЛИ 10 / (Поле1 - 5) > 0 И (втТаблица.Поле1 > 5) | |||
| 18
    
        RomaH naïve 07.09.22✎ 15:09 | 
        и я вполне сознательно пользуюсь таким поведением
 если у меня бывают исключения в выражении, но я могу их исключить в первом условии - то вполне применительно | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |