Вход | Регистрация
 

Непонятно, почему один запрос быстрее другого.

Непонятно, почему один запрос быстрее другого.
Я
   Галахад
 
09.04.19 - 10:18
ВЫБРАТЬ
    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачДата, &КонДата, , ) КАК ПродажиОбороты
ГДЕ
    ПродажиОбороты.Склад В ИЕРАРХИИ(&Склад)
    И НЕ ПродажиОбороты.Контрагент В ИЕРАРХИИ (&Контрагент)

3 секунды.

ВЫБРАТЬ
    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(
            &НачДата,
            &КонДата,
            ,
            Склад В ИЕРАРХИИ (&Склад)
                И НЕ Контрагент В ИЕРАРХИИ (&Контрагент)) КАК ПродажиОбороты

11 секунд.

Как так-то?
 
 
   VladZ
 
1 - 09.04.19 - 10:20
(0) Видимо, хреново работает сравнение вида "Склад В ИЕРАРХИИ (&Склад) "
   VladZ
 
2 - 09.04.19 - 10:22
Покажи результаты сравнения, в случае, когда " И НЕ Контрагент В ИЕРАРХИИ (&Контрагент) " в скобках и когда в условии "где".
   sqr4
 
3 - 09.04.19 - 10:22
ну да наверно логично, это медленная операция применяется только к подобранным записям за период. А вторая при построении таблицы оборотов. А какой период указан?
   Фрэнки
 
4 - 09.04.19 - 10:23
Это старый прикол

не нужно пытаться использовать В ИЕРАРХИИ в параметрах выборки других таблиц
   palsergeich
 
5 - 09.04.19 - 10:25
ВИЕРАРХИИ не является оптимальным оператором.
Лучше сначала получить все элементы, потом засунуть в параметры Вирт таблицы.
   Галахад
 
6 - 09.04.19 - 10:29
Понятно. Спасибо!
   Галахад
 
7 - 09.04.19 - 10:47
Сделал 3 запроса. Двумя получил список контрагентов и складов.

Разница между этой громоздкой конструкцией и первым запросом всего 15%, кода получилось значительно больше. :-(
   1Сергей
 
8 - 09.04.19 - 10:48
У вас сложная структура складов?
   Фрэнки
 
9 - 09.04.19 - 10:52
И что тебе с того кода? Установлена некая граница на количество символов в текстах запросов?
   Галахад
 
10 - 09.04.19 - 10:52
(8) Хм. Раньше об этом не задумывался.

Посмотрел. Да, больше 1000 складов. :-()
   d4rkmesa
 
11 - 09.04.19 - 10:52
(0) А сколько запрос записей выдает, миллионы?
   Галахад
 
12 - 09.04.19 - 10:53
(9) Ждал значительного изменения скорости.
   d4rkmesa
 
13 - 09.04.19 - 10:54
3-й запрос покажите.
   Галахад
 
14 - 09.04.19 - 10:54
(11) Да нет. Где-то в районе 20'000.
   1Сергей
 
15 - 09.04.19 - 10:56
(10) сколько уровней макс?
   seevkik
 
16 - 09.04.19 - 11:03
Ну почему-почему, в первой ты в Обороты() отбор установил, во второй нет
   1Сергей
 
17 - 09.04.19 - 11:04
(16) может, наоборот? :)
   Очевидно
 
18 - 09.04.19 - 11:05
(0)
Могу ошибаться но есть мнение:
Конструкция "В иерархии" на уровне MSSQL выполняется следуюшим образом : сначала 1С - формирует некую ВТ, куда выбирает элементы согласно структуре иерархии, а потом происходит соединение с таблицей, на которую вы накладываете это условие.
Получается когда вы ставите эту конструкцию в условие виртуальной таблицы - происходит неявное соединение с подзапросом (Формирования Вирт. таблицы Обороты), из-за этого MSSQL может некорректно оценивать текущую статистику и формировать не самый быстрый план запроса.

Если же вы выносите это условие в условия "Где" - у вас сначала формируется Виртуальная таблица с оптимальным планом , а потом на неё накладывается фильтр.
но т.к. неявного соединения с подзапросом отсутствует - виртуальная таблица строится по оптимальному плану. и это быстрее.
   Очевидно
 
19 - 09.04.19 - 11:08
   seevkik
 
20 - 09.04.19 - 11:08
(17) ну точняк, наоборот
Короче как мне кажется, если простым языком, то это из-за двух условий в виртуальной таблице
   d4rkmesa
 
21 - 09.04.19 - 11:11
Слишком все неопределенно. Я бы проверил регламенты SQL, итоги, агрегаты. Если это стандартная УТ10/УПП, то там вроде нет измерения Склад в РН Продажи, проверить бы, установлено ли там свойство Индексировать измерения, если оно добавлено. А то может оно в итоге не включено или это вовсе реквизит.
   Очевидно
 
22 - 09.04.19 - 11:15
(21) думаю чтобы внести определенность , было бы круто планы скуля посмотреть обоих запросов.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.