Имя: Пароль:
1C
1С v8
помогите оптимизировать запрос
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
ПриПолученииДанныхССервера()