новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Обсуждение к заданию: Оптимизировать запрос

    • #1
    • 26.04.2016 19:11
    0
    Требуется оптимизация времени выполнения запроса. Предложения рассматриваются в формате "могу сократить время выполнения во столько раз "  Подробнее>>
    • #2
    • 26.04.2016 19:14
    0
    Без знания о размерах и исходных таблиц оценить производительность запроса весьма затруднительно.
    • #3
    • 26.04.2016 19:20
    0
    При всем уважении, Вам никто количественных значений не даст. Так как это зависит от многих факторов.
    • #4
    • 26.04.2016 19:35
    0
    Кроме того, в запрос передаются какие то таблицы значений. Что за таблицы не понятно. Нужна база как минимум. А в идеале доступ к Вашим серверам. Вдруг у вас там агрегаты от царя гороха.
    • #5
    • 26.04.2016 20:21
    0
    Без базы невозможно оценить, ещё бы план запроса глянуть. Такие дела на обум не делаются.
    • #6
    • 26.04.2016 20:28
    0
    Как минимум в запросе не проиндексированы поля временных таблиц по которым идёт соединение, короче все индивидуально.
    • #7
    • 26.04.2016 21:10
    • Отредактировано: 26.04.2016 21:12:51
    0
    Потенциально тормозные места:

    1) В первых нескольких запросах:
    ВЫБРАТЬ
    	МатрицаПроизводства.ПФ,
    	МатрицаПроизводства.ВремяЦепочки,
    	МатрицаПроизводства.ГруппаРЦ
    ПОМЕСТИТЬ МатрицаПр
    ИЗ
    	&МатрицаПроизводства КАК МатрицаПроизводства
    ;
    

    отсутствует индексирование получаемых таблиц. А потом эти таблицы участвуют в соединении. Решение - проиндексировать.

    2) В середине есть запрос с кучей таких разименованией:
    ЕСТЬNULL(СпрПолуфабрикатыДочернПФ.ПФДоч.СсылкаНаОбъединеный.ФлагРаспределения, ИСТИНА)
    

    Вместо этого тоже лучше бы выполнять соединение в явном виде, причем в этом соединении может оказаться, что снова не хватает индексов.
    Общая методика локализации простая: нарезаем пакет на отдельные запросы и засекаем время выполнения каждого.

    Ах да. Оптимизировать могу, но во сколько раз - как уже здесь несколько раз указали, гадать бесполезно.
    • #8
    • 26.04.2016 21:11
    0
    Низамов Илья Юрьевич
    Как минимум в запросе не проиндексированы поля временных таблиц по которым идёт соединение, короче все индивидуально.


    а я вот где-то читал/видел, что индексация ВТ не всегда гуд
    иногда может потребоваться больше времени на индексацию, чем выгода от той индексации.

    Все собеседники полностью правы - все зависит не от одного фактора.
    • #9
    • 26.04.2016 21:16
    0
    Николай
    а я вот где-то читал/видел, что индексация ВТ не всегда гуд
    иногда может потребоваться больше времени на индексацию, чем выгода от той индексации.


    Совершенно верно. Индексация может быть вредна при совпадении 2 условий:
    1) Размеры временных таблиц предсказуемы и очень малы (десятки/сотни строк).
    2) Сам запрос выполняется крайне часто, и даже потерянные миллисекунды критичны.

    Здесь же, похоже, речь идет о построении какого-то отчета или о заполнении таб.части документа. Ну, может быть, проведение документа. Судя по тому, что это задание здесь опубликовано с предложением "ускорить в несколько раз", миллисекунды погоды не сыграют )))
    • #10
    • 26.04.2016 21:30
    0
    этот запрос выполняется по многу раз (порядок 1000-2000раз), это не отчет.
    некоторые таблицы малы заведомо (десятки строк).Самые большие ТаблицаДоступногоВремени и МатрицаПроизводства (несколько тысяч),
    • #11
    • 26.04.2016 22:37
    0
    Этот запрос выполняется 1000-2000 раз?? Так проблема в этом.
    В целом с запросом ок, разве что, если много данных в таблице, то проиндексируйте ВТ по соединяемым полям.
    • #12
    • 27.04.2016 19:35
    • Отредактировано: 27.04.2016 19:35:27
    0
    Передача таблиц в запрос заведомо медленное решение. Если это не отчет и выполняется много раз, то его следует переписать на коде 1С.
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться