Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 01:41

долго отрабатывает запрос

Автор evg85, 21 ноя 2012, 09:15

0 Пользователей и 1 гость просматривают эту тему.

evg85

Есть запрос для конфигурации ЗУП(текст запроса ниже), на файловой версии это запрос отрабатывает около 3 сек, этот же самый запрос на серверной версии 1С Postgres отрабатывает около 34сек. Данные на файловой и серверной версии идентичные. В чем может быть проблема ?

ВЫБРАТЬ
    СУММА(ОсновныеНачисленияРаботниковОрганизаций.Результат) КАК Доход,
    ВложенныйЗапрос.Результат КАК Удержания,
    НАЧАЛОПЕРИОДА(ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, ДЕНЬ) КАК Поле1,
    ВложенныйЗапрос1.НалогПриход КАК Налог,
    ВложенныйЗапрос2.Результат КАК ДопДоход,
    ВложенныйЗапрос3.ПФРНакопительная,
    ВложенныйЗапрос3.ПФРСтраховая,
    ВложенныйЗапрос3.ПФРНакопительнаяЕНВД,
    ВложенныйЗапрос3.ПФРСтраховаяЕНВД,
    ВложенныйЗапрос4.СтрПФРСтраховая,
    ВложенныйЗапрос4.СтрПФРСтраховаяЕНВД,
    ВложенныйЗапрос4.СтрПФРНакопительная,
    ВложенныйЗапрос4.СтрПФРНакопительнаяЕНВД,
    СУММА(ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДней) КАК ОтработаноДней,
    СУММА(ОсновныеНачисленияРаботниковОрганизаций.НормаДней) КАК НормаДней,
    ОсновныеНачисленияРаботниковОрганизаций.ГрафикРаботы,
    ВложенныйЗапрос5.Профсоюз КАК Проф
ИЗ
    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СУММА(УдержанияРаботниковОрганизаций.Результат) КАК Результат,
            НАЧАЛОПЕРИОДА(УдержанияРаботниковОрганизаций.ПериодРегистрации, ДЕНЬ) КАК ПериодРегистрации
        ИЗ
            РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизаций
        ГДЕ
            УдержанияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачДата И &КонДата
            И УдержанияРаботниковОрганизаций.ФизЛицо = &ФизЛицо
            И (УдержанияРаботниковОрганизаций.ВидРасчета = &ВидРасчета1
                    ИЛИ УдержанияРаботниковОрганизаций.ВидРасчета = &ВидРасчета2
                    ИЛИ УдержанияРаботниковОрганизаций.ВидРасчета = &ВидРасчета3
                    ИЛИ УдержанияРаботниковОрганизаций.ВидРасчета = &ВидРасчета4
                    ИЛИ УдержанияРаботниковОрганизаций.ВидРасчета = &ВидРасчета5
                    ИЛИ УдержанияРаботниковОрганизаций.ВидРасчета = &ВидРасчета6)
       
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(УдержанияРаботниковОрганизаций.ПериодРегистрации, ДЕНЬ)) КАК ВложенныйЗапрос
        ПО ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации = ВложенныйЗапрос.ПериодРегистрации
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетомОбороты.МесяцНалоговогоПериода, МЕСЯЦ) КАК Поле1,
            СУММА(НДФЛРасчетыСБюджетомОбороты.НалогПриход) КАК НалогПриход
        ИЗ
            РегистрНакопления.НДФЛРасчетыСБюджетом.Обороты(&НачДата, &КонДата, , ФизЛицо = &ФизЛицо) КАК НДФЛРасчетыСБюджетомОбороты
       
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетомОбороты.МесяцНалоговогоПериода, МЕСЯЦ)) КАК ВложенныйЗапрос1
        ПО ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации = ВложенныйЗапрос1.Поле1
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            НАЧАЛОПЕРИОДА(ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации, МЕСЯЦ) КАК ПериодРегистрации,
            СУММА(ДополнительныеНачисленияРаботниковОрганизаций.Результат) КАК Результат
        ИЗ
            РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисленияРаботниковОрганизаций
        ГДЕ
            ДополнительныеНачисленияРаботниковОрганизаций.ФизЛицо = &ФизЛицо
            И ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачДата И &КонДата
            И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.КодДоходаНДФЛ = &КодДоходаНДФЛ
       
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации, МЕСЯЦ)) КАК ВложенныйЗапрос2
        ПО ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации = ВложенныйЗапрос2.ПериодРегистрации
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЕСНИсчисленный.Период КАК Период,
            СУММА(ЕСНИсчисленный.ПФРНакопительная) КАК ПФРНакопительная,
            СУММА(ЕСНИсчисленный.ПФРСтраховая) КАК ПФРСтраховая,
            СУММА(ЕСНИсчисленный.ПФРНакопительнаяЕНВД) КАК ПФРНакопительнаяЕНВД,
            СУММА(ЕСНИсчисленный.ПФРСтраховаяЕНВД) КАК ПФРСтраховаяЕНВД
        ИЗ
            РегистрНакопления.ЕСНИсчисленный КАК ЕСНИсчисленный
        ГДЕ
            ЕСНИсчисленный.Период МЕЖДУ &НачДата И &КонДата
            И ЕСНИсчисленный.ФизЛицо = &ФизЛицо
       
        СГРУППИРОВАТЬ ПО
            ЕСНИсчисленный.Период
       
        ДЛЯ ИЗМЕНЕНИЯ) КАК ВложенныйЗапрос3
        ПО ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации = ВложенныйЗапрос3.Период
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СтраховыеВзносыИсчисленные.Период КАК Период,
            СУММА(СтраховыеВзносыИсчисленные.ПФРСтраховая) КАК СтрПФРСтраховая,
            СУММА(СтраховыеВзносыИсчисленные.ПФРСтраховаяЕНВД) КАК СтрПФРСтраховаяЕНВД,
            СУММА(СтраховыеВзносыИсчисленные.ПФРНакопительная) КАК СтрПФРНакопительная,
            СУММА(СтраховыеВзносыИсчисленные.ПФРНакопительнаяЕНВД) КАК СтрПФРНакопительнаяЕНВД
        ИЗ
            РегистрНакопления.СтраховыеВзносыИсчисленные КАК СтраховыеВзносыИсчисленные
        ГДЕ
            СтраховыеВзносыИсчисленные.Период МЕЖДУ &НачДата И &КонДата
            И СтраховыеВзносыИсчисленные.ФизЛицо = &ФизЛицо
       
        СГРУППИРОВАТЬ ПО
            СтраховыеВзносыИсчисленные.Период) КАК ВложенныйЗапрос4
        ПО ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации = ВложенныйЗапрос4.Период
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СУММА(УдержанияРаботниковОрганизаций.Результат) КАК Профсоюз,
            НАЧАЛОПЕРИОДА(УдержанияРаботниковОрганизаций.ПериодРегистрации, ДЕНЬ) КАК ПериодРегистрации
        ИЗ
            РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизаций
        ГДЕ
            УдержанияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачДата И &КонДата
            И УдержанияРаботниковОрганизаций.ФизЛицо = &ФизЛицо
            И УдержанияРаботниковОрганизаций.ВидРасчета = &Профсоюзы
       
        СГРУППИРОВАТЬ ПО
            НАЧАЛОПЕРИОДА(УдержанияРаботниковОрганизаций.ПериодРегистрации, ДЕНЬ)) КАК ВложенныйЗапрос5
        ПО ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации = ВложенныйЗапрос5.ПериодРегистрации
ГДЕ
    ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &НачДата И &КонДата
    И ОсновныеНачисленияРаботниковОрганизаций.ФизЛицо = &ФизЛицо
    И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета.КодДоходаНДФЛ = &КодДоходаНДФЛ

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Результат,
    НАЧАЛОПЕРИОДА(ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, ДЕНЬ),
    ВложенныйЗапрос1.НалогПриход,
    ВложенныйЗапрос2.Результат,
    ВложенныйЗапрос3.ПФРНакопительная,
    ВложенныйЗапрос3.ПФРСтраховая,
    ВложенныйЗапрос3.ПФРНакопительнаяЕНВД,
    ВложенныйЗапрос3.ПФРСтраховаяЕНВД,
    ВложенныйЗапрос4.СтрПФРСтраховая,
    ВложенныйЗапрос4.СтрПФРСтраховаяЕНВД,
    ВложенныйЗапрос4.СтрПФРНакопительная,
    ВложенныйЗапрос4.СтрПФРНакопительнаяЕНВД,
    ОсновныеНачисленияРаботниковОрганизаций.ГрафикРаботы,
    ВложенныйЗапрос5.Профсоюз

has

Для начала рекомендую избавиться от вложенных запросов и использовать параметры виртуальных таблиц вместо условия ГДЕ.

evg85

об изменении запроса подумать можно, но интересует причина медленной работы на серверном варианте, в отличии от файловой

has

Я бы впервую очередь изменил запрос. А насчет разного времени выполнения, то гугл в помощь. Где-то я уже натыкался на такое.

Dethmontt

SQL накладывает свои блокировки - отсюда и время выполнения дольше.

В Фаловом - попробуй когда 10-20 пользователей работают в БД, выполнить запрос, почуешь разницу... (SQL будет быстрее =))

P.S. Запрос переписывать надо....
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

evg85

так и думал, что это связано с блокировками, спасибо буду переписывать запрос

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск