Вход | Регистрация
    1  2   
1С:Предприятие :: 1С:Предприятие 8 общая

помогите оптимизировать запрос

помогите оптимизировать запрос
Я
   novichok79
 
31.07.19 - 12:13
Доброго времени суток, друзья. Имеется запрос в следующем посте, 60% времени запроса занимает заполнение временной таблицы СостоянияОбъектов. Предполагаю что тормоза из-за CASE WHEN. Подскажите, пожалуйста, что можно дописать в запросе, чтобы он работал быстрее?
Заранее благодарю.
 
 
   novichok79
 
1 - 31.07.19 - 12:13
ВЫБРАТЬ
    ВЫРАЗИТЬ(Т.Объект КАК Справочник.Объекты) КАК Объект
ПОМЕСТИТЬ СписокОбъектов
ИЗ
    РегистрСведений.СостоянияОбъектов КАК Т
ГДЕ
    Т.Задание В(&ЗаданияОтбор)

СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(Т.Объект КАК Справочник.Объекты)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВЫРАЗИТЬ(Состояния.Объект КАК Справочник.Объекты) КАК Объект,
    ВЫБОР
        КОГДА Состояния.Состояние13 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА Состояния.Состояние13 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 11
        КОГДА Состояния.Состояние13 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 12
        ИНАЧЕ 0
    КОНЕЦ КАК Состояние13,
    ВЫБОР
        КОГДА Состояния.Состояние14 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА Состояния.Состояние14 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 11
        КОГДА Состояния.Состояние14 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 12
        ИНАЧЕ 0
    КОНЕЦ КАК Состояние14,
    ВЫБОР
        КОГДА Состояния.Состояние16 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА Состояния.Состояние16 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 1
        КОГДА Состояния.Состояние16 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 2
        ИНАЧЕ 0
    КОНЕЦ КАК Состояние16,
    ВЫБОР
        КОГДА Состояния.Состояние17 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА Состояния.Состояние17 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 1
        КОГДА Состояния.Состояние17 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 2
        ИНАЧЕ 0
    КОНЕЦ КАК Состояние17,
    ВЫБОР
        КОГДА Состояния.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА Состояния.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 11
        КОГДА Состояния.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 12
        ИНАЧЕ 0
    КОНЕЦ КАК Состояние25
ПОМЕСТИТЬ СостоянияОбъектов
ИЗ
    РегистрСведений.СостоянияОбъектов КАК Состояния
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокОбъектов КАК Т
        ПО Состояния.Объект = Т.Объект
            И (Состояния.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор))

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВЫРАЗИТЬ(СостоянияБезЗаданий.Объект КАК Справочник.Объекты),
    ВЫБОР
        КОГДА СостоянияБезЗаданий.Состояние13 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА СостоянияБезЗаданий.Состояние13 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 1
        КОГДА СостоянияБезЗаданий.Состояние13 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 2
        ИНАЧЕ 0
    КОНЕЦ,
    ВЫБОР
        КОГДА СостоянияБезЗаданий.Состояние14 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА СостоянияБезЗаданий.Состояние14 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 1
        КОГДА СостоянияБезЗаданий.Состояние14 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 2
        ИНАЧЕ 0
    КОНЕЦ,
    ВЫБОР
        КОГДА СостоянияБезЗаданий.Состояние16 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА СостоянияБезЗаданий.Состояние16 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 11
        КОГДА СостоянияБезЗаданий.Состояние16 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 12
        ИНАЧЕ 0
    КОНЕЦ,
    ВЫБОР
        КОГДА СостоянияБезЗаданий.Состояние17 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА СостоянияБезЗаданий.Состояние17 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 11
        КОГДА СостоянияБезЗаданий.Состояние17 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 12
        ИНАЧЕ 0
    КОНЕЦ,
    ВЫБОР
        КОГДА СостоянияБезЗаданий.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА СостоянияБезЗаданий.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 1
        КОГДА СостоянияБезЗаданий.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 2
        ИНАЧЕ 0
    КОНЕЦ
ИЗ
    РегистрСведений.СостоянияБезЗаданий КАК СостоянияБезЗаданий
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокОбъектов КАК Т
        ПО СостоянияБезЗаданий.Объект = Т.Объект
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Т.Объект КАК Объект,
    ВЫБОР
        КОГДА МАКСИМУМ(Т.Состояние13) В (1, 11)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет)
        КОГДА МАКСИМУМ(Т.Состояние13) В (2, 12)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да)
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)
    КОНЕЦ КАК Состояние13,
    ВЫБОР
        КОГДА МАКСИМУМ(Т.Состояние14) В (1, 11)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да)
        КОГДА МАКСИМУМ(Т.Состояние14) В (2, 12)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет)
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)
    КОНЕЦ КАК Состояние14,
    ВЫБОР
        КОГДА МАКСИМУМ(Т.Состояние16) В (1, 11)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет)
        КОГДА МАКСИМУМ(Т.Состояние16) В (2, 12)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да)
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)
    КОНЕЦ КАК Состояние16,
    ВЫБОР
        КОГДА МАКСИМУМ(Т.Состояние17) В (1, 11)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет)
        КОГДА МАКСИМУМ(Т.Состояние17) В (2, 12)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да)
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)
    КОНЕЦ КАК Состояние17,
    ВЫБОР
        КОГДА МАКСИМУМ(Т.Состояние25) В (1, 11)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет)
        КОГДА МАКСИМУМ(Т.Состояние25) В (2, 12)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да)
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null)
    КОНЕЦ КАК Состояние25
ПОМЕСТИТЬ ПоследниеСостояния
ИЗ
    СостоянияОбъектов КАК Т

СГРУППИРОВАТЬ ПО
    Т.Объект
   Ёпрст
 
2 - 31.07.19 - 12:17
(0)
>>>(Состояния.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор))

Задание составного типа ? 
От тут все тормоза
   Вафель
 
3 - 31.07.19 - 12:19
индекс по заданию есть?
   arsik
 
4 - 31.07.19 - 12:20
Зачем вот так проверять?
 ВЫБОР
        КОГДА Состояния.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Null), ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.ПустаяСсылка))
            ТОГДА 0
        КОГДА Состояния.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет))
            ТОГДА 11
        КОГДА Состояния.Состояние25 В (ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да))
            ТОГДА 12
        ИНАЧЕ 0
    КОНЕЦ КАК Состояние25

Можно же проще
 ВЫБОР
        КОГДА Состояния.Состояние25 = ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет)
            ТОГДА 11
        КОГДА Состояния.Состояние25 = ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да)
            ТОГДА 12
        ИНАЧЕ 0
    КОНЕЦ КАК Состояние25

   arsik
 
5 - 31.07.19 - 12:22
Ну и самое проблемное наверно тут:
    РегистрСведений.СостоянияОбъектов КАК Состояния
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокОбъектов КАК Т
        ПО Состояния.Объект = Т.Объект
            И (Состояния.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор))

Это надо через объединение переделать
   Ёпрст
 
6 - 31.07.19 - 12:23
ну и &ЗаданияОтбор там лишнее, при inner вы уже их отсекли по табличке СписокОбъектов
   novichok79
 
7 - 31.07.19 - 12:28
(2) нет
(3) да
(4) согласен
(5) можно убрать inner join на where переделать, указать отбор по заданию просто.
(6) моя логика - больше условий = лучше, поля то все индексированные. кстати условие в соединении не по порядку индекса, т. к. Задание первым идет в измерениях, а Объект вторым.
   Ёпрст
 
8 - 31.07.19 - 12:51
(7) воткни условие в (2) через выразить, и только на  &ЗаданияЗадачОтбор
   Ёпрст
 
9 - 31.07.19 - 12:53
тип того

И Выразить(Состояния.Задание как НеведомаяХрень) В (&ЗаданияЗадачОтбор)
   novichok79
 
10 - 31.07.19 - 12:56
(9) а если тип несоставной, разве это что-то поменяет?
   Широкий
 
11 - 31.07.19 - 12:59
(9) хрень несешь
   novichok79
 
12 - 31.07.19 - 12:59
на уровне субд это же все превратится в что-то типа
ON
Q_036_T_001.Fld23730 IN (699:93b70e6da2bd78934f84128696661303, 699:00000000000000000000000000000000)
   Широкий
 
13 - 31.07.19 - 13:02
Если данных дофига то на времянку СписокОбъектов - делай индекс по Состояния.Объект = Т.Объект
   novichok79
 
14 - 31.07.19 - 13:04
(13) кстати можно, да
   Дык ё
 
15 - 31.07.19 - 13:18
(1) в первом запросе:
СГРУППИРОВАТЬ ПО
    Т.Объект

(4) можно еще проще:
ВЫБОР Состояния.Состояние25
    КОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Нет)
        ТОГДА 11
    КОГДА ЗНАЧЕНИЕ(Перечисление.ТройноеБулево.Да)
        ТОГДА 12
    ИНАЧЕ 0
КОНЕЦ КАК Состояние25

(6) не факт

(9) если есть шанс попасть в индекс, так делать не надо
   H A D G E H O G s
 
16 - 31.07.19 - 13:20
(0) План запроса в XML (фактический) в студию.
   novichok79
 
17 - 31.07.19 - 16:09
(16) вот оно, trace for replay
https://yadi.sk/d/hQ60MV26lA6PNw
   novichok79
 
18 - 31.07.19 - 16:10
я, конечно, не Гилев, но судя по плану запроса, ожидается что 44% времени займет вставка выборки во временную таблицу, если я правильно понял.
   novichok79
 
19 - 31.07.19 - 16:18
плюс есть scan по таблице  РегистрСведений.СостоянияБезЗаданий
   ManyakRus
 
20 - 31.07.19 - 16:30
Состояние13 ...Состояние25
вы правила нормализации баз данных читали ?
запрещается делать одинаковые реквизиты Состояние13...Состояние25
все ваши проблемы только из-за этого...
   dka80
 
21 - 31.07.19 - 16:30
О каком времени идет речь? Если запрос исполняется 1 секунду, то может пофиг на эти 60%?
   unregistered
 
22 - 31.07.19 - 16:35
А нельзя никакую временную таблицу соответствия состояний запилить, с которой потом просто делать соединение?
Тем более, что там всего три варианта комбинаций - 0-1-2, 0-2-1, и 0-11-12. Причем для значения "0" соответствие писать не обязательно - если NULL в соединении, то "0" в Состоянии.
   unregistered
 
23 - 31.07.19 - 16:37
(20) Планы видов характеристик - это для высоколобых умников. Пацанам не западло реквизитик добавить.
   novichok79
 
24 - 31.07.19 - 16:43
(21) 30 секунд, динамический список.
   H A D G E H O G s
 
25 - 31.07.19 - 16:43
Первый шаг
MDOP=1
   H A D G E H O G s
 
26 - 31.07.19 - 16:44
2 шаг = не вставлять 360 кстрок в ВТ
   novichok79
 
27 - 31.07.19 - 16:44
(20) есть регистр сделанный по правилам, там 360 млн записей, пользователям нужно последнее состояние, поэтому сделана плоская таблица с ресурсами Состояние1-Состояние35.
   novichok79
 
28 - 31.07.19 - 16:45
(26) есть еще задумка - не делать выбор когда а лефтджойнить заготовленную таблицу вариантов
   novichok79
 
29 - 31.07.19 - 16:45
(22) вот как раз моя задумка.
   novichok79
 
30 - 31.07.19 - 16:46
(23) пацанам западло ждать полгода, пока простая выборка из регистра отрабатывает по полчаса.
 
 Рекламное место пустует
   H A D G E H O G s
 
31 - 31.07.19 - 16:49
Енот, конечно, жарит котлеты, но я не понимаю, зачем там вообще временные таблицы?
   H A D G E H O G s
 
32 - 31.07.19 - 16:51
Там кусок дичи. Перепишите запрос
   H A D G E H O G s
 
33 - 31.07.19 - 16:53
ВЫБРАТЬ
    ВЫРАЗИТЬ(Т.Объект КАК Справочник.Объекты) КАК Объект
ПОМЕСТИТЬ СписокОбъектов
ИЗ
    РегистрСведений.СостоянияОбъектов КАК Т
ГДЕ
    Т.Задание В(&ЗаданияОтбор)

СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(Т.Объект КАК Справочник.Объекты)

Выбирает все объекты из регистра, у которых задание в списке &ЗаданияОтбор

значит, во втором запросе, тупо вывод дублей в обоих запросах в объединении + в 1 запросе условие 
И (Состояния.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор))
избыточно и достаточно Состояния.Задание В (&ЗаданияОтбор), а вообще, там не нужно условие, так как Внутреннее соединение
   H A D G E H O G s
 
34 - 31.07.19 - 16:55
Ну и 
MDOP=1

пользователи вам спасибо скажут
   unregistered
 
35 - 31.07.19 - 16:56
(29) Ты объясни зачем это всё многочисленное преобразование из состояний, выраженных в виде перечисления в числа (0, 1, 2, 11, 12), а потом обратно из чисел в состояния, выраженные перечислением?
Какой сокральный смысл этого круговорота?
   H A D G E H O G s
 
36 - 31.07.19 - 16:57
(35) Костыли за другим прогом
   novichok79
 
37 - 31.07.19 - 16:58
(33) таблица объектов сначала, чтобы потом по ней фильтровать регистр СостоянияБезЗаданий. но тут ты прав, легче на лефтджойн переписать.
   H A D G E H O G s
 
38 - 31.07.19 - 16:58
Мне вот ТройноеБулево понравилось.
Где то заплакал разработчик Сетуни.
   novichok79
 
39 - 31.07.19 - 16:59
(38) ахахах, там оно по-другому называется, просто я его так переименовал. но по сути это тригерры 3-х состояний - обработки не было, была успешна и не была успешна.
   novichok79
 
40 - 31.07.19 - 16:59
(35) первая версия запроса, написанная вчера за пару часов.
   novichok79
 
41 - 31.07.19 - 17:00
(31) а потому что это неполный запрос. в следующем запросе результат последних трех лефтджойнится к основной таблице.
   H A D G E H O G s
 
42 - 31.07.19 - 17:01
(37)

ИЗ
    РегистрСведений.СостоянияОбъектов КАК Состояния
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокОбъектов КАК Т
ПО Состояния.Объект = Т.Объект
  И (Состояния.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор))

ничем не отличается от 

ИЗ
    РегистрСведений.СостоянияБезЗаданий КАК СостоянияБезЗаданий
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокОбъектов КАК Т
        ПО СостоянияБезЗаданий.Объект = Т.Объект
   tixis
 
43 - 31.07.19 - 17:01
(34) что такое MDOP=1 ?
   H A D G E H O G s
 
44 - 31.07.19 - 17:01
Нет, стоп, там другой регистр, ошибся
   H A D G E H O G s
 
45 - 31.07.19 - 17:02
Тогда ЛефтДжойн в одном запросе, без временных.
   unregistered
 
46 - 31.07.19 - 17:04
(43) Максимальная степень паралеллизма.
Ограничивает число процессоров, используемых в одновременно исполнении планов.
   tixis
 
47 - 31.07.19 - 17:04
(46) спасибо
   H A D G E H O G s
 
48 - 31.07.19 - 17:05
(43) Max Degree of Parallelism
   unregistered
 
49 - 31.07.19 - 17:09
(40) И что?
А смысл то какой? Зачем нужны числа? В ВТ ПоследниеСостояния ты получаешь те же самые состояния, какие были исходные в регистре. Но чтобы это родить, устраиваешь целую феерию с жонглированием числами 0,1,2,11 и 12.
   novichok79
 
50 - 31.07.19 - 17:15
(49) такой сценарий нежизненный, но если в обработке просмотра состояний сделают выбор по нескольким заданиям, то нужно взять "лучшее" значение состояния для объекта, для этого все эти жонглирования с числами.
   H A D G E H O G s
 
51 - 31.07.19 - 17:15
Ну и статистика не обновлена.
http://prntscr.com/omiu91
пришлось tempdb задействовать, так как памяти не хватило, ждали меньше строк, сколько в реале. Но это - такое.
   novichok79
 
52 - 31.07.19 - 17:17
(51) это тестовая база, которая "енот жарит котлеты". но приму к сведению, спасибо огромной за помощь. ёжик, ты - крутой.
   novichok79
 
53 - 31.07.19 - 17:18
(52) *огромное
   unregistered
 
54 - 31.07.19 - 17:18
(50) Ни слова не понял. Я про Фому спросил, а ты мне про Ерёму рассказал. Числа зачем нужны?
   Ёпрст
 
55 - 31.07.19 - 17:21
(54) при сортировке берет с большим весом поди потом
   novichok79
 
56 - 31.07.19 - 17:21
(54) число это вес значения состояния (null, да, нет), который потом выбирается по максимуму. что тут непонятного? вес значения зависит от настройки элемента справочника Состояния, связанного с ресурсом регистра.
   unregistered
 
57 - 31.07.19 - 17:28
(56) А зачем  они нужны, если при любом раскладе, если, например, Состояние13 = "Да", то на выходе ты получишь в ВТ ПоследниеСостояния "Да"? А если "Нет", то получишь "Нет".
Нафига пихать туда всяческие единицы, нули, двойки и т.д., потом группировать и получать исходное значение?
   novichok79
 
58 - 31.07.19 - 17:32
(57) потому что на 1 объект должна получиться 1 итоговая строка с ресурсами Состояние1-Состояние35, где будут самые приоритетные значения состояний из нескольких заданий.
   novichok79
 
59 - 31.07.19 - 17:32
(57) если в отборе 1 задание, используется запрос без группировок.
   Форест Гамп
 
60 - 31.07.19 - 18:14
(0) У тебя 3 раза читаются одни и те же данные. А с 1-м запросом - 4 раза. https://ibb.co/CWSZwRL
Переписывай запрос.
   H A D G E H O G s
 
61 - 31.07.19 - 18:16
(60) Чем смотрел план?
   Форест Гамп
 
62 - 31.07.19 - 18:17
(61) глазами
   H A D G E H O G s
 
63 - 31.07.19 - 18:20
(62) Я имею ввиду прогу, которая такую картинку построила.
   Форест Гамп
 
64 - 31.07.19 - 18:21
(63) SentryOne
   H A D G E H O G s
 
65 - 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
   H A D G E H O G s
 
69 - 31.07.19 - 18:37
SentryOne божественная штука.
   Форест Гамп
 
70 - 31.07.19 - 18:37
(69) да, ежоф, это так
   Форест Гамп
 
71 - 31.07.19 - 18:44
(0) Ради интереса кстати попробуй MAXDOP = 1, обнови статистику и выложи те же данные в xml. Интересно насколько могут влиять эти показатели.
   xXeNoNx
 
72 - 31.07.19 - 19:37
Мля, тож дин список, нахрена там вт?
   novichok79
 
73 - 02.08.19 - 10:57
show must go on, ёпта.
новый "шедевр" выглядит вот так
   novichok79
 
74 - 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.Порядок) КАК Предл
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Т
|        ПО Предл.Предложение = Т.Ссылка";
   novichok79
 
75 - 02.08.19 - 10:59
   novichok79
 
76 - 02.08.19 - 10:59
^^^ план запроса для профессионалов 1С
   Форест Гамп
 
77 - 02.08.19 - 11:13
(76) В этой трассировке нет XML-плана, скуль не смог его собрать видимо из-за того что он слишком сложный.
   Форест Гамп
 
78 - 02.08.19 - 11:14
(76) а почему ты не ставишь MAXDOP = 1?
   novichok79
 
79 - 02.08.19 - 11:25
(78) на этом SQL серваке не только мои базы, поменять могу настройки, но без особой надобности не делаю.
   Форест Гамп
 
80 - 02.08.19 - 11:41
(79) даже по текстовому плану понятно что запрос гавно
   novichok79
 
81 - 02.08.19 - 11:50
(80) ок, поконкретнее можно?
   Форест Гамп
 
82 - 02.08.19 - 11:53
(81) поконкретней можно сказать только видя план в XML
   Форест Гамп
 
83 - 02.08.19 - 11:56
да даже без XML видно что это не запрос а пздц
   novichok79
 
84 - 02.08.19 - 12:06
(82) я обновил план запроса по ссылке в яндекс. скачайте файл заново.
   Форест Гамп
 
85 - 02.08.19 - 12:12
(84) то же самое
   novichok79
 
86 - 02.08.19 - 12:14
(85) странно, ну да ладно.
   Форест Гамп
 
87 - 02.08.19 - 12:24
(86) ну ты сам подумай... сколько записей у тебя в РегистрСведений.Состояния?
   novichok79
 
88 - 02.08.19 - 12:54
в тестовой базе, 3 млн во всем регистре, в рабочей - 60 млн, выборка в запросе получает около 360 тысяч записей.
   H A D G E H O G s
 
89 - 02.08.19 - 12:54
(88) А на экран выведется 45 ?
   H A D G E H O G s
 
90 - 02.08.19 - 12:54
В дин списке?
   Форест Гамп
 
91 - 02.08.19 - 12:59
(88) у тебя куча соединений этих 360 тыс, это не бесплатно
   ptiz
 
92 - 02.08.19 - 13:01
(74) Вот тут:
|        ГДЕ
|            Т.Задание В (&ЗаданияОтбор, &ЗаданияЗадачОтбор)

ЗаданияОтбор и ЗаданияЗадачОтбор - это массивы(списки)? Сколько там элементов?
Я бы для начала максимально упростил запрос, выкинув всё, кроме этого условия и добился, чтобы оно максимально эффективно накладывалось.
   ptiz
 
93 - 02.08.19 - 13:02
Лучше это переделать на внутреннее соединение, если много элементов. Особенно, если они разных типов.
   Форест Гамп
 
94 - 02.08.19 - 13:04
(93) бред
   Форест Гамп
 
95 - 02.08.19 - 13:07
С условием там все в порядке, оно попадает в индекс.
   ptiz
 
96 - 02.08.19 - 13:12
(95) Хорошо если попадает. А в общем случае, я проверял на практике - если элементов больше 128 и разных типов, то условие В() просто убивает запрос (по крайней мере на 8.2 и SQL 2008, причем у 8.1 такого поведения не наблюдалось).
   Форест Гамп
 
97 - 02.08.19 - 13:15
(96) не помню в какой версии 8.3 пофиксили это дело и платформа сама преобразует скульный запрос если кол-во элементов большое
   novichok79
 
98 - 02.08.19 - 14:44
(89) на экран выводится все, без лишних отборов. другое дело что это демонический список, и как платформа отсекает лишнее мне непонятно.
   novichok79
 
99 - 02.08.19 - 14:44
(90) да
   novichok79
 
100 - 02.08.19 - 14:44
(91) ну либо CASE WHEN либо вот это
  1  2   

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