|   |   | 
| 
 | Оптимизация запроса с "ГДЕ" | ☑ | ||
|---|---|---|---|---|
| 0
    
        Owner2005 09.07.23✎ 21:14 | 
        Доброго вечера всем, товарищи программисты!
 Зело вынес мне все равновесие такой запрос: ВЫБРАТЬ Реализация.Ссылка ИЗ Документ.Реализация КАК Реализация ГДЕ ГОД(Реализация.Дата) >= &Год Запрос.УстановитьПараметр("Год", 2000); Как видно сложного тут ничего нет, но коллега утверждает что его нужно оптимизировать. Знаю про "Или" и тому подобное, но тут совершенно нет ничего... Если сравнивать просто дату, итоговый план запроса не изменится. Единственное, что увидел, это использование > вместо >=, со смещением даты на 1 сек. раньше, но назвать это оптимизацией язык не поворачивается. Очень было бы здорово услышать коллег, хотя догадываюсь, что тут можно услышать... | |||
| 1
    
        Волшебник 09.07.23✎ 21:16 | 
        Где Реализация.Дата >= датавремя(2000,1,1,0,0,0)     | |||
| 2
    
        Owner2005 09.07.23✎ 21:36 | 
        (1) Спасибо, но датавремя по сути ничего не меняет.
 Сделал базу вот план запроса. Никаких торомозов тут быть не может, Index Seek есть... Nested Loops(Inner Join, OUTER REFERENCES:([Expr1003], [Expr1004], [Expr1002])) Compute Scalar(DEFINE:(([Expr1003],[Expr1004],[Expr1002])=GetRangeWithMismatchedTypes([@P1],NULL,(22)))) Constant Scan Index Seek(OBJECT:(Документ.МаршрутныйЛист.[_Document21_2] AS [T1]), SEEK:([T1].[Дата] > [Expr1003] AND [T1].[Дата] < [Expr1004]) ORDERED FORWARD) | |||
| 3
    
        Жан Пердежон 09.07.23✎ 21:36 | 
        на таблице документов всегда есть индекс по дате...
 когда ты сравниваешь по дате - он может использоваться, как только ты с датой что-то делаешь в запросе - индекс идет нафиг... план запроса не изменится, если у тебя в базе 3,5 документа; | |||
| 4
    
        Жан Пердежон 09.07.23✎ 21:37 | 
        (2) план запроса явно не от запроса в (0)     | |||
| 5
    
        Owner2005 09.07.23✎ 21:39 | 
        (4) Да, вместо "реализация" "МаршрутныйЛист" единственное различие.     | |||
| 6
    
        Owner2005 09.07.23✎ 21:43 | 
        (3) Создал порядка 15000 документов. План запроса такой же. 
 Любые функции работы с датой вроде ДатаВремя или ГОД на плане запросов никак не сказывются. | |||
| 7
    
        Owner2005 09.07.23✎ 21:44 | 
        Тут не нравится GetRangeWithMismatchedTypes.     | |||
| 8
    
        Жан Пердежон 09.07.23✎ 21:44 | 
        самый правильный вариант: Дата > &ПараметрДата     | |||
| 9
    
        Owner2005 09.07.23✎ 21:45 | 
        Согласен, самое простое и очевидное.     | |||
| 10
    
        Волшебник 10.07.23✎ 09:17 | 
        Надо смотреть не планы запроса, а замерять время выполнения     | |||
| 11
    
        polosov 10.07.23✎ 11:01 | 
        (10) Ваши сведения не соответствуют действительности.     | |||
| 12
    
        unenu 10.07.23✎ 11:28 | 
        Может соединением будет быстрее:
 ВЫБРАТЬ датавремя(2000,1,1,0,0,0) КАК ГодОтбора Поместить ВтГодОтбора ; ВЫБРАТЬ Реализация.Ссылка ИЗ Документ.Реализация КАК Реализация Внутренее соединение ВтГодОтбора КАК ВтГодОтбора По Реализация.Дата >= ВтГодОтбора.ГодОтбора | |||
| 13
    
        JanK 10.07.23✎ 12:37 | 
        (1) Язык запросов 8ки пытается оптимизировать такие сравнения сам, в этом случае должен был справиться.
 (5) В плане явно есть join, откуда он могут взяться в запросе (0) как-то не видно (я, конечно, слепой - но пока уверен что там всего одна таблица). | |||
| 14
    
        Смотрящий 10.07.23✎ 12:45 | 
        (0) Шариться надо по всем документам за период - не проведенный и помеченным на удаление ?     | |||
| 15
    
        Жан Пердежон 10.07.23✎ 13:15 | 
        (15) это GetRangeWithMismatchedTypes() из параметра &Год создает таблицу c двумя датами, с которой и соединяет, чтобы использовать Index Seek...     | |||
| 16
    
        JanK 10.07.23✎ 14:19 | 
        (16) Спасибо, интересно.
 Но откуда в запросе (0) GetRangeWithMismatchedTypes? | |||
| 17
    
        alexey123perm 10.07.23✎ 16:35 | 
        (0)
 Посмотрите этот курс. Там как раз рассматривается ситуация про условия в функциях работы с датами https://xn----1-bedvffifm4g.xn--p1ai/free/queries-optimization-mini-course/ Нужно изменить, Как в (1) | |||
| 18
    
        Конструктор1С 10.07.23✎ 19:13 | 
        (6) ошибаешься, ещё как сказываются     | |||
| 19
    
        mistеr 11.07.23✎ 08:34 | 
        (2) Неужели платформа научилась переписывать Год()?
 Респект, если так. | |||
| 20
    
        Simod 11.07.23✎ 09:39 | 
        (0) Автор, см. https://its.1c.ru/db/v8std#content:658:hdoc
 Твой случай там явно разобран. | |||
| 21
    
        Owner2005 25.07.23✎ 12:23 | 
        Всем большое спасибо за обсуждение и ссылки.
 Ветку можно закрывать. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |