|
помогите оптимизировать запрос | ☑ | ||
---|---|---|---|---|
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
|
ПриПолученииДанныхССервера()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |