|   |   | 
| 
 | помогите оптимизировать запрос | ☑ | ||
|---|---|---|---|---|
| 0
    
        novichok79 31.07.19✎ 12:13 | 
        Доброго времени суток, друзья. Имеется запрос в следующем посте, 60% времени запроса занимает заполнение временной таблицы СостоянияОбъектов. Предполагаю что тормоза из-за CASE WHEN. Подскажите, пожалуйста, что можно дописать в запросе, чтобы он работал быстрее?
 Заранее благодарю. | |||
| 8
    
        Ёпрст гуру 31.07.19✎ 12:51 | 
        (7) воткни условие в (2) через выразить, и только на  &ЗаданияЗадачОтбор     | |||
| 9
    
        Ёпрст гуру 31.07.19✎ 12:53 | 
        тип того
 И Выразить(Состояния.Задание как НеведомаяХрень) В (&ЗаданияЗадачОтбор) | |||
| 10
    
        novichok79 31.07.19✎ 12:56 | 
        (9) а если тип несоставной, разве это что-то поменяет?     | |||
| 11
    
        Широкий 31.07.19✎ 12:59 | 
        (9) хрень несешь     | |||
| 12
    
        novichok79 31.07.19✎ 12:59 | 
        на уровне субд это же все превратится в что-то типа
 ON Q_036_T_001.Fld23730 IN (699:93b70e6da2bd78934f84128696661303, 699:00000000000000000000000000000000) | |||
| 13
    
        Широкий 31.07.19✎ 13:02 | 
        Если данных дофига то на времянку СписокОбъектов - делай индекс по Состояния.Объект = Т.Объект     | |||
| 14
    
        novichok79 31.07.19✎ 13:04 | 
        (13) кстати можно, да     | |||
| 15
    
        Дык ё 31.07.19✎ 13:18 | 
        (1) в первом запросе:
 СГРУППИРОВАТЬ ПО Т.Объект (4) можно еще проще: ВЫБОР Состояния.Состояние25 КОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет) ТОГДА 11 КОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да) ТОГДА 12 ИНАЧЕ 0 КОНЕЦ КАК Состояние25 (6) не факт (9) если есть шанс попасть в индекс, так делать не надо | |||
| 16
    
        H A D G E H O G s 31.07.19✎ 13:20 | 
        (0) План запроса в XML (фактический) в студию.     | |||
| 17
    
        novichok79 31.07.19✎ 16:09 | 
        (16) вот оно, trace for replay
 https://yadi.sk/d/hQ60MV26lA6PNw | |||
| 18
    
        novichok79 31.07.19✎ 16:10 | 
        я, конечно, не Гилев, но судя по плану запроса, ожидается что 44% времени займет вставка выборки во временную таблицу, если я правильно понял.     | |||
| 19
    
        novichok79 31.07.19✎ 16:18 | 
        плюс есть scan по таблице  РегистрСведений.СостоянияБезЗаданий     | |||
| 20
    
        ManyakRus 31.07.19✎ 16:30 | 
        Состояние13 ...Состояние25
 вы правила нормализации баз данных читали ? запрещается делать одинаковые реквизиты Состояние13...Состояние25 все ваши проблемы только из-за этого... | |||
| 21
    
        dka80 31.07.19✎ 16:30 | 
        О каком времени идет речь? Если запрос исполняется 1 секунду, то может пофиг на эти 60%?     | |||
| 22
    
        unregistered 31.07.19✎ 16:35 | 
        А нельзя никакую временную таблицу соответствия состояний запилить, с которой потом просто делать соединение?
 Тем более, что там всего три варианта комбинаций - 0-1-2, 0-2-1, и 0-11-12. Причем для значения "0" соответствие писать не обязательно - если NULL в соединении, то "0" в Состоянии. | |||
| 23
    
        unregistered 31.07.19✎ 16:37 | 
        (20) Планы видов характеристик - это для высоколобых умников. Пацанам не западло реквизитик добавить.     | |||
| 24
    
        novichok79 31.07.19✎ 16:43 | 
        (21) 30 секунд, динамический список.     | |||
| 25
    
        H A D G E H O G s 31.07.19✎ 16:43 | 
        Первый шаг
 MDOP=1 | |||
| 26
    
        H A D G E H O G s 31.07.19✎ 16:44 | 
        2 шаг = не вставлять 360 кстрок в ВТ     | |||
| 27
    
        novichok79 31.07.19✎ 16:44 | 
        (20) есть регистр сделанный по правилам, там 360 млн записей, пользователям нужно последнее состояние, поэтому сделана плоская таблица с ресурсами Состояние1-Состояние35.     | |||
| 28
    
        novichok79 31.07.19✎ 16:45 | 
        (26) есть еще задумка - не делать выбор когда а лефтджойнить заготовленную таблицу вариантов     | |||
| 29
    
        novichok79 31.07.19✎ 16:45 | 
        (22) вот как раз моя задумка.     | |||
| 30
    
        novichok79 31.07.19✎ 16:46 | 
        (23) пацанам западло ждать полгода, пока простая выборка из регистра отрабатывает по полчаса.     | |||
| 31
    
        H A D G E H O G s 31.07.19✎ 16:49 | 
        Енот, конечно, жарит котлеты, но я не понимаю, зачем там вообще временные таблицы?     | |||
| 32
    
        H A D G E H O G s 31.07.19✎ 16:51 | 
        Там кусок дичи. Перепишите запрос     | |||
| 33
    
        H A D G E H O G s 31.07.19✎ 16:53 | 
        ВЫБРАТЬ
 ВЫРАЗИТЬ(Т.Объект КАК Справочник.Объекты) КАК Объект ПОМЕСТИТЬ СписокОбъектов ИЗ РегистрСведений.СостоянияОбъектов КАК Т ГДЕ Т.Задание В(&ЗаданияОтбор) СГРУППИРОВАТЬ ПО ВЫРАЗИТЬ(Т.Объект КАК Справочник.Объекты) Выбирает все объекты из регистра, у которых задание в списке &ЗаданияОтбор значит, во втором запросе, тупо вывод дублей в обоих запросах в объединении + в 1 запросе условие И (Состояния.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор)) избыточно и достаточно Состояния.Задание В (&ЗаданияОтбор), а вообще, там не нужно условие, так как Внутреннее соединение | |||
| 34
    
        H A D G E H O G s 31.07.19✎ 16:55 | 
        Ну и 
 MDOP=1 пользователи вам спасибо скажут | |||
| 35
    
        unregistered 31.07.19✎ 16:56 | 
        (29) Ты объясни зачем это всё многочисленное преобразование из состояний, выраженных в виде перечисления в числа (0, 1, 2, 11, 12), а потом обратно из чисел в состояния, выраженные перечислением?
 Какой сокральный смысл этого круговорота? | |||
| 36
    
        H A D G E H O G s 31.07.19✎ 16:57 | 
        (35) Костыли за другим прогом     | |||
| 37
    
        novichok79 31.07.19✎ 16:58 | 
        (33) таблица объектов сначала, чтобы потом по ней фильтровать регистр СостоянияБезЗаданий. но тут ты прав, легче на лефтджойн переписать.     | |||
| 38
    
        H A D G E H O G s 31.07.19✎ 16:58 | 
        Мне вот ТройноеБулево понравилось.
 Где то заплакал разработчик Сетуни. | |||
| 39
    
        novichok79 31.07.19✎ 16:59 | 
        (38) ахахах, там оно по-другому называется, просто я его так переименовал. но по сути это тригерры 3-х состояний - обработки не было, была успешна и не была успешна.     | |||
| 40
    
        novichok79 31.07.19✎ 16:59 | 
        (35) первая версия запроса, написанная вчера за пару часов.     | |||
| 41
    
        novichok79 31.07.19✎ 17:00 | 
        (31) а потому что это неполный запрос. в следующем запросе результат последних трех лефтджойнится к основной таблице.     | |||
| 42
    
        H A D G E H O G s 31.07.19✎ 17:01 | 
        (37) 
 ИЗ РегистрСведений.СостоянияОбъектов КАК Состояния ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокОбъектов КАК Т ПО Состояния.Объект = Т.Объект И (Состояния.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор)) ничем не отличается от ИЗ РегистрСведений.СостоянияБезЗаданий КАК СостоянияБезЗаданий ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокОбъектов КАК Т ПО СостоянияБезЗаданий.Объект = Т.Объект | |||
| 43
    
        tixis 31.07.19✎ 17:01 | 
        (34) что такое MDOP=1 ?     | |||
| 44
    
        H A D G E H O G s 31.07.19✎ 17:01 | 
        Нет, стоп, там другой регистр, ошибся     | |||
| 45
    
        H A D G E H O G s 31.07.19✎ 17:02 | 
        Тогда ЛефтДжойн в одном запросе, без временных.     | |||
| 46
    
        unregistered 31.07.19✎ 17:04 | 
        (43) Максимальная степень паралеллизма.
 Ограничивает число процессоров, используемых в одновременно исполнении планов. | |||
| 47
    
        tixis 31.07.19✎ 17:04 | 
        (46) спасибо     | |||
| 48
    
        H A D G E H O G s 31.07.19✎ 17:05 | 
        (43) Max Degree of Parallelism     | |||
| 49
    
        unregistered 31.07.19✎ 17:09 | 
        (40) И что?
 А смысл то какой? Зачем нужны числа? В ВТ ПоследниеСостояния ты получаешь те же самые состояния, какие были исходные в регистре. Но чтобы это родить, устраиваешь целую феерию с жонглированием числами 0,1,2,11 и 12. | |||
| 50
    
        novichok79 31.07.19✎ 17:15 | 
        (49) такой сценарий нежизненный, но если в обработке просмотра состояний сделают выбор по нескольким заданиям, то нужно взять "лучшее" значение состояния для объекта, для этого все эти жонглирования с числами.     | |||
| 51
    
        H A D G E H O G s 31.07.19✎ 17:15 | 
        Ну и статистика не обновлена.
 http://prntscr.com/omiu91 пришлось tempdb задействовать, так как памяти не хватило, ждали меньше строк, сколько в реале. Но это - такое. | |||
| 52
    
        novichok79 31.07.19✎ 17:17 | 
        (51) это тестовая база, которая "енот жарит котлеты". но приму к сведению, спасибо огромной за помощь. ёжик, ты - крутой.     | |||
| 53
    
        novichok79 31.07.19✎ 17:18 | 
        (52) *огромное     | |||
| 54
    
        unregistered 31.07.19✎ 17:18 | 
        (50) Ни слова не понял. Я про Фому спросил, а ты мне про Ерёму рассказал. Числа зачем нужны?     | |||
| 55
    
        Ёпрст гуру 31.07.19✎ 17:21 | 
        (54) при сортировке берет с большим весом поди потом     | |||
| 56
    
        novichok79 31.07.19✎ 17:21 | 
        (54) число это вес значения состояния (null, да, нет), который потом выбирается по максимуму. что тут непонятного? вес значения зависит от настройки элемента справочника Состояния, связанного с ресурсом регистра.     | |||
| 57
    
        unregistered 31.07.19✎ 17:28 | 
        (56) А зачем  они нужны, если при любом раскладе, если, например, Состояние13 = "Да", то на выходе ты получишь в ВТ ПоследниеСостояния "Да"? А если "Нет", то получишь "Нет".
 Нафига пихать туда всяческие единицы, нули, двойки и т.д., потом группировать и получать исходное значение? | |||
| 58
    
        novichok79 31.07.19✎ 17:32 | 
        (57) потому что на 1 объект должна получиться 1 итоговая строка с ресурсами Состояние1-Состояние35, где будут самые приоритетные значения состояний из нескольких заданий.     | |||
| 59
    
        novichok79 31.07.19✎ 17:32 | 
        (57) если в отборе 1 задание, используется запрос без группировок.     | |||
| 60
    
        Форест Гамп 31.07.19✎ 18:14 | 
        (0) У тебя 3 раза читаются одни и те же данные. А с 1-м запросом - 4 раза. https://ibb.co/CWSZwRL
 Переписывай запрос. | |||
| 61
    
        H A D G E H O G s 31.07.19✎ 18:16 | 
        (60) Чем смотрел план?     | |||
| 62
    
        Форест Гамп 31.07.19✎ 18:17 | 
        (61) глазами     | |||
| 63
    
        H A D G E H O G s 31.07.19✎ 18:20 | 
        (62) Я имею ввиду прогу, которая такую картинку построила.     | |||
| 64
    
        Форест Гамп 31.07.19✎ 18:21 | 
        (63) SentryOne     | |||
| 65
    
        H A D G E H O G s 31.07.19✎ 18:23 | 
        Спасибо.     | |||
| 66
    
        Вафель 31.07.19✎ 18:25 | 
        (60) те что ты выделил по 0.7% занимают     | |||
| 67
    
        Форест Гамп 31.07.19✎ 18:30 | 
        (66) На проценты особого смысла нет смотреть, они вроде бы от стоимости считаются, а стоимость оценочная величина. Там еще идет скан по _InfoRG1912, от него тоже надо избавиться.     | |||
| 68
    
        Форест Гамп 31.07.19✎ 18:36 | 
        Там 3 скана, 4 сортировки, одна из которых привела к спилу в темпдб из-за ошибки в оценке строк, а эти все сортировки сделаны для мердж джойна. Если бы не было их то было бы намного проще и быстрее https://ibb.co/x7yqwJN     | |||
| 69
    
        H A D G E H O G s 31.07.19✎ 18:37 | 
        SentryOne божественная штука.     | |||
| 70
    
        Форест Гамп 31.07.19✎ 18:37 | 
        (69) да, ежоф, это так     | |||
| 71
    
        Форест Гамп 31.07.19✎ 18:44 | 
        (0) Ради интереса кстати попробуй MAXDOP = 1, обнови статистику и выложи те же данные в xml. Интересно насколько могут влиять эти показатели.     | |||
| 72
    
        xXeNoNx 31.07.19✎ 19:37 | 
        Мля, тож дин список, нахрена там вт?     | |||
| 73
    
        novichok79 02.08.19✎ 10:57 | 
        show must go on, ёпта.
 новый "шедевр" выглядит вот так | |||
| 74
    
        novichok79 02.08.19✎ 10:57 | 
        Запрос.Текст = 
 "ВЫБРАТЬ | ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет) КАК Значение, | 1 КАК Порядок |ПОМЕСТИТЬ ВТ_ПорядокСостояний | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да), | 2 | |ИНДЕКСИРОВАТЬ ПО | Значение, | Порядок |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да) КАК Значение, | 1 КАК Порядок |ПОМЕСТИТЬ ВТ_ПорядокСостоянийОбратный | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет), | 2 | |ИНДЕКСИРОВАТЬ ПО | Значение, | Порядок |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Т.Ссылка КАК Предложение, | 1 КАК Количество, | Т.Сегмент КАК Сегмент, | Т.Подсегмент КАК Подсегмент, | Т.Автор КАК Источник, | Т.Заметки КАК Заметки, | Предл.Состояние1 КАК Состояние1, | Предл.Состояние2 КАК Состояние2, | Предл.Состояние3 КАК Состояние3, | Предл.Состояние4 КАК Состояние4, | Предл.Состояние5 КАК Состояние5, | Предл.Состояние6 КАК Состояние6, | Предл.Состояние7 КАК Состояние7, | Предл.Состояние8 КАК Состояние8, | Предл.Состояние9 КАК Состояние9, | Предл.Состояние10 КАК Состояние10, | Предл.Состояние11 КАК Состояние11, | Предл.Состояние12 КАК Состояние12, | Предл.Состояние13 КАК Состояние13, | Предл.Состояние14 КАК Состояние14, | Предл.Состояние15 КАК Состояние15, | Предл.Состояние16 КАК Состояние16, | Предл.Состояние17 КАК Состояние17, | Предл.Состояние18 КАК Состояние18, | Предл.Состояние19 КАК Состояние19, | Предл.Состояние21 КАК Состояние21, | Предл.Состояние22 КАК Состояние22, | Предл.Состояние25 КАК Состояние25, | ВЫБОР | КОГДА Предл.Состояние10 = ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да) | И Предл.Состояние11 = ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да) | И Предл.Состояние12 = ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Критерий1 |ИЗ | (ВЫБРАТЬ | Т.Предложение КАК Предложение, | ЕСТЬNULL(ЗначениеСостояние1.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние1, | ЕСТЬNULL(ЗначениеСостояние2.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние2, | ЕСТЬNULL(ЗначениеСостояние3.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние3, | ЕСТЬNULL(ЗначениеСостояние4.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние4, | ЕСТЬNULL(ЗначениеСостояние5.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние5, | ЕСТЬNULL(ЗначениеСостояние6.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние6, | ЕСТЬNULL(ЗначениеСостояние7.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние7, | ЕСТЬNULL(ЗначениеСостояние8.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние8, | ЕСТЬNULL(ЗначениеСостояние9.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние9, | ЕСТЬNULL(ЗначениеСостояние10.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние10, | ЕСТЬNULL(ЗначениеСостояние11.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние11, | ЕСТЬNULL(ЗначениеСостояние12.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние12, | ЕСТЬNULL(ЗначениеСостояние13.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние13, | ЕСТЬNULL(ЗначениеСостояние14.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние14, | ЕСТЬNULL(ЗначениеСостояние15.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние15, | ЕСТЬNULL(ЗначениеСостояние16.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние16, | ЕСТЬNULL(ЗначениеСостояние17.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние17, | ЕСТЬNULL(ЗначениеСостояние18.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние18, | ЕСТЬNULL(ЗначениеСостояние19.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние19, | ЕСТЬNULL(ЗначениеСостояние21.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние21, | ЕСТЬNULL(ЗначениеСостояние22.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние22, | ЕСТЬNULL(ЗначениеСостояние25.Значение, ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)) КАК Состояние25 | ИЗ | (ВЫБРАТЬ | ВЫРАЗИТЬ(Т.Предложение КАК Справочник.ПредложенияОбъектовНедвижимости) КАК Предложение, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние1.Порядок, 0)) КАК Состояние1, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние2.Порядок, 0)) КАК Состояние2, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние3.Порядок, 0)) КАК Состояние3, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние4.Порядок, 0)) КАК Состояние4, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние5.Порядок, 0)) КАК Состояние5, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние6.Порядок, 0)) КАК Состояние6, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние7.Порядок, 0)) КАК Состояние7, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние8.Порядок, 0)) КАК Состояние8, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние9.Порядок, 0)) КАК Состояние9, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние10.Порядок, 0)) КАК Состояние10, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние11.Порядок, 0)) КАК Состояние11, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние12.Порядок, 0)) КАК Состояние12, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние13.Порядок, 0)) КАК Состояние13, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние14.Порядок, 0)) КАК Состояние14, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние15.Порядок, 0)) КАК Состояние15, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние16.Порядок, 0)) КАК Состояние16, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние17.Порядок, 0)) КАК Состояние17, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние18.Порядок, 0)) КАК Состояние18, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние19.Порядок, 0)) КАК Состояние19, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние21.Порядок, 0)) КАК Состояние21, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние22.Порядок, 0)) КАК Состояние22, | МАКСИМУМ(ЕСТЬNULL(ПорядокСостояние25.Порядок, 0)) КАК Состояние25 | ИЗ | РегистрСведений.Состояния КАК Т | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияБезЗаданий КАК АбсолютнаяВерификация | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние13 | ПО АбсолютнаяВерификация.Состояние13 = ПорядокСостояние13.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние14 | ПО АбсолютнаяВерификация.Состояние14 = ПорядокСостояние14.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние21 | ПО АбсолютнаяВерификация.Состояние21 = ПорядокСостояние21.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние22 | ПО АбсолютнаяВерификация.Состояние22 = ПорядокСостояние22.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние25 | ПО АбсолютнаяВерификация.Состояние25 = ПорядокСостояние25.Значение | ПО Т.Предложение = АбсолютнаяВерификация.Предложение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние1 | ПО Т.Состояние1 = ПорядокСостояние1.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние2 | ПО Т.Состояние2 = ПорядокСостояние2.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние3 | ПО Т.Состояние3 = ПорядокСостояние3.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние4 | ПО Т.Состояние4 = ПорядокСостояние4.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние5 | ПО Т.Состояние5 = ПорядокСостояние5.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние6 | ПО Т.Состояние6 = ПорядокСостояние6.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние7 | ПО Т.Состояние7 = ПорядокСостояние7.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние8 | ПО Т.Состояние8 = ПорядокСостояние8.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние9 | ПО Т.Состояние9 = ПорядокСостояние9.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние10 | ПО Т.Состояние10 = ПорядокСостояние10.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние11 | ПО Т.Состояние11 = ПорядокСостояние11.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние12 | ПО Т.Состояние12 = ПорядокСостояние12.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние15 | ПО Т.Состояние15 = ПорядокСостояние15.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние16 | ПО Т.Состояние16 = ПорядокСостояние16.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние17 | ПО Т.Состояние17 = ПорядокСостояние17.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние18 | ПО Т.Состояние18 = ПорядокСостояние18.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние19 | ПО Т.Состояние19 = ПорядокСостояние19.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние20 | ПО Т.Состояние20 = ПорядокСостояние20.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние23 | ПО Т.Состояние23 = ПорядокСостояние23.Значение | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ПорядокСостояние24 | ПО Т.Состояние24 = ПорядокСостояние24.Значение | ГДЕ | Т.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор) | | СГРУППИРОВАТЬ ПО | ВЫРАЗИТЬ(Т.Предложение КАК Справочник.ПредложенияОбъектовНедвижимости)) КАК Т | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние1 | ПО Т.Состояние1 = ЗначениеСостояние1.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние2 | ПО Т.Состояние2 = ЗначениеСостояние2.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние3 | ПО Т.Состояние3 = ЗначениеСостояние3.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние4 | ПО Т.Состояние4 = ЗначениеСостояние4.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние5 | ПО Т.Состояние5 = ЗначениеСостояние5.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние6 | ПО Т.Состояние6 = ЗначениеСостояние6.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние7 | ПО Т.Состояние7 = ЗначениеСостояние7.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние8 | ПО Т.Состояние8 = ЗначениеСостояние8.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние9 | ПО Т.Состояние9 = ЗначениеСостояние9.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние10 | ПО Т.Состояние10 = ЗначениеСостояние10.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние11 | ПО Т.Состояние11 = ЗначениеСостояние11.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние12 | ПО Т.Состояние12 = ЗначениеСостояние12.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние13 | ПО Т.Состояние13 = ЗначениеСостояние13.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние14 | ПО Т.Состояние14 = ЗначениеСостояние14.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние15 | ПО Т.Состояние15 = ЗначениеСостояние15.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние16 | ПО Т.Состояние16 = ЗначениеСостояние16.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние17 | ПО Т.Состояние17 = ЗначениеСостояние17.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние18 | ПО Т.Состояние18 = ЗначениеСостояние18.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние19 | ПО Т.Состояние19 = ЗначениеСостояние19.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние21 | ПО Т.Состояние21 = ЗначениеСостояние21.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние22 | ПО Т.Состояние22 = ЗначениеСостояние22.Порядок | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПорядокСостояний КАК ЗначениеСостояние25 | ПО Т.Состояние25 = ЗначениеСостояние25.Порядок) КАК Предл | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Т | ПО Предл.Предложение = Т.Ссылка"; | |||
| 75
    
        novichok79 02.08.19✎ 10:59 | ||||
| 76
    
        novichok79 02.08.19✎ 10:59 | 
        ^^^ план запроса для профессионалов 1С     | |||
| 77
    
        Форест Гамп 02.08.19✎ 11:13 | 
        (76) В этой трассировке нет XML-плана, скуль не смог его собрать видимо из-за того что он слишком сложный.     | |||
| 78
    
        Форест Гамп 02.08.19✎ 11:14 | 
        (76) а почему ты не ставишь MAXDOP = 1?     | |||
| 79
    
        novichok79 02.08.19✎ 11:25 | 
        (78) на этом SQL серваке не только мои базы, поменять могу настройки, но без особой надобности не делаю.     | |||
| 80
    
        Форест Гамп 02.08.19✎ 11:41 | 
        (79) даже по текстовому плану понятно что запрос гавно     | |||
| 81
    
        novichok79 02.08.19✎ 11:50 | 
        (80) ок, поконкретнее можно?     | |||
| 82
    
        Форест Гамп 02.08.19✎ 11:53 | 
        (81) поконкретней можно сказать только видя план в XML     | |||
| 83
    
        Форест Гамп 02.08.19✎ 11:56 | 
        да даже без XML видно что это не запрос а пздц     | |||
| 84
    
        novichok79 02.08.19✎ 12:06 | 
        (82) я обновил план запроса по ссылке в яндекс. скачайте файл заново.     | |||
| 85
    
        Форест Гамп 02.08.19✎ 12:12 | 
        (84) то же самое     | |||
| 86
    
        novichok79 02.08.19✎ 12:14 | 
        (85) странно, ну да ладно.     | |||
| 87
    
        Форест Гамп 02.08.19✎ 12:24 | 
        (86) ну ты сам подумай... сколько записей у тебя в РегистрСведений.Состояния?     | |||
| 88
    
        novichok79 02.08.19✎ 12:54 | 
        в тестовой базе, 3 млн во всем регистре, в рабочей - 60 млн, выборка в запросе получает около 360 тысяч записей.     | |||
| 89
    
        H A D G E H O G s 02.08.19✎ 12:54 | 
        (88) А на экран выведется 45 ?     | |||
| 90
    
        H A D G E H O G s 02.08.19✎ 12:54 | 
        В дин списке?     | |||
| 91
    
        Форест Гамп 02.08.19✎ 12:59 | 
        (88) у тебя куча соединений этих 360 тыс, это не бесплатно     | |||
| 92
    
        ptiz 02.08.19✎ 13:01 | 
        (74) Вот тут:
 | ГДЕ | Т.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор) ЗаданияОтбор и ЗаданияЗадачОтбор - это массивы(списки)? Сколько там элементов? Я бы для начала максимально упростил запрос, выкинув всё, кроме этого условия и добился, чтобы оно максимально эффективно накладывалось. | |||
| 93
    
        ptiz 02.08.19✎ 13:02 | 
        Лучше это переделать на внутреннее соединение, если много элементов. Особенно, если они разных типов.     | |||
| 94
    
        Форест Гамп 02.08.19✎ 13:04 | 
        (93) бред     | |||
| 95
    
        Форест Гамп 02.08.19✎ 13:07 | 
        С условием там все в порядке, оно попадает в индекс.     | |||
| 96
    
        ptiz 02.08.19✎ 13:12 | 
        (95) Хорошо если попадает. А в общем случае, я проверял на практике - если элементов больше 128 и разных типов, то условие В() просто убивает запрос (по крайней мере на 8.2 и SQL 2008, причем у 8.1 такого поведения не наблюдалось).     | |||
| 97
    
        Форест Гамп 02.08.19✎ 13:15 | 
        (96) не помню в какой версии 8.3 пофиксили это дело и платформа сама преобразует скульный запрос если кол-во элементов большое     | |||
| 98
    
        novichok79 02.08.19✎ 14:44 | 
        (89) на экран выводится все, без лишних отборов. другое дело что это демонический список, и как платформа отсекает лишнее мне непонятно.     | |||
| 99
    
        novichok79 02.08.19✎ 14:44 | 
        (90) да     | |||
| 100
    
        novichok79 02.08.19✎ 14:44 | 
        (91) ну либо CASE WHEN либо вот это     | |||
| 101
    
        novichok79 02.08.19✎ 14:45 | 
        (92) массивы, от двух и более элементов     | |||
| 102
    
        novichok79 02.08.19✎ 14:46 | 
        (97) в 13 или в 14 пофиксили     | |||
| 103
    
        novichok79 02.08.19✎ 14:50 | 
        оценка выборки - 364181 объекта     | |||
| 104
    
        H A D G E H O G s 02.08.19✎ 15:13 | 
        (98) Берет и делает TOP 45
 Убери "Динамическое считывание данных", будет легче. Все из за того, что 1С не сделало помещение в ВТ выборки из ОсновнойТаблицы, хотя я просил. Это же, это же 45 строк на каждый скролл помещаться будет. Херня -война, сейчас там помещается 356 тыс. | |||
| 105
    
        novichok79 02.08.19✎ 15:15 | 
        (104) это называется 1C-way, как бы по 1Совски, доступно и всерьез. никому не нужные группирующие наборы сделали, а к тому, чтобы дать разрабу "полностью ломать" демонический список никак не подошли.     | |||
| 106
    
        H A D G E H O G s 02.08.19✎ 15:37 | 
        Переделай на     | |||
| 107
    
        H A D G E H O G s 02.08.19✎ 15:37 | 
        ПриПолученииДанныхССервера()     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |