powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите отработать говнокод:)
13 сообщений из 13, страница 1 из 1
Помогите отработать говнокод:)
    #38120752
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять же после нашего великого обновления Cache, осталась еще одна проблема выборки платежей из базы, но в отличии от предыдущей моей темы (<Maxstring>File+6^%qarmac), этот запрос теперь виснет намертво... Получается что тут кроется какой то говнокод. Сам уже перечитал раз на 100 этот запрос, но к сожалению пока понять не могу почему зависает. Сам запрос предоставляю. Понимаю что для пущей необходимости нужен DDL таблицы. Я его постараюсь после обеда достать, а пока вот сам скул-код)
select 
  IsNull(ENTNMB, 65999999999) as ENTNMB,
  cast(IsNull(GOD, 2000) as numeric(4,0)) as GOD,
  cast(IsNull(KVARTAL, 0) as numeric(2,0)) as KVARTAL,
  SUM(PAY_SUM_STR) as STR,
  SUM(PAY_SUM_NAK) as NAK
from 
(
  select 
    cast(Insurerfk->RegNumberPFR as numeric(12,0)) as ENTNMB,
    PAY_SUM_STR,
    PAY_SUM_NAK,
    YEAR(PayDate) as GOD,
    case 
      when YEAR(PayDate) = 2010 then
        case
          when (MONTH(PayDate) between 1 and 6) then 1
          when (MONTH(PayDate) between 7 and 12) then 2
        end
      else 
        case
          when (MONTH(PayDate) between 1 and 3) then 1
          when (MONTH(PayDate) between 4 and 6) then 2
          when (MONTH(PayDate) between 7 and 9) then 3
          when (MONTH(PayDate) between 10 and 12) then 4
        end
    end as KVARTAL
  from
    (
    /* нефиктивные приходные платежи по банку */
    select
      Id,
      Insurerfk, 
      case when (IsIncome = 1) and (KBKFK = 39210202010061000160) then "SUM" 
         when (IsIncome = 0) and (KBKFK = 39210202010061000160) then -"SUM" 
         else 0 
      end as PAY_SUM_STR, 
        case when (IsIncome = 1) and (KBKFK = 39210202020061000160) then "SUM" 
           when (IsIncome = 0) and (KBKFK = 39210202020061000160) then -"SUM"
        else 0
      end as PAY_SUM_NAK,
      DateBankOut as PayDate
    from
      ASV_Entities.Payment
    where
      (IsFiction = 0) 
      and (IsIncome = 1) 
      and (InnerBankDocumentNumber is null)
      and (KBKFK = 39210202010061000160 or KBKFK = 39210202020061000160)
      and (IsComposite = 0)
    union
    /* внебанковские приходы + все расходы */
      select
        case 
          when q1.InsurerFK is null then q2.Id
          else q1.Id
        end as Id,
        case 
          when q1.InsurerFK is null then q2.InsurerFK
          else q1.InsurerFK
        end as Insurerfk,
        case 
          when q1.InsurerFK is null then 
            case when q2.IsFiction = 0 then 
              q2.PAY_SUM_STR
            else 
              0  
            end
          when q2.InsurerFK is null then q1.PAY_SUM_STR
          else q1.PAY_SUM_STR + q2.PAY_SUM_STR
        end as PAY_SUM_STR,
        case 
          when q1.InsurerFK is null then 
            case when q2.IsFiction = 0 then 
              q2.PAY_SUM_NAK
            else 
              0  
            end
          when q2.InsurerFK is null then q1.PAY_SUM_NAK
          else q1.PAY_SUM_NAK + q2.PAY_SUM_NAK
        end as PAY_SUM_NAK,        
        case 
          when q1.InsurerFK is null then q2.PayDate
          when q2.InsurerFK is null then q1.PayDate
          else q2.PayDate
        end as PayDate          
      from
      /* внебанковские приходные платежи */
(      select
        Id,
        InnerBankDocumentNumber,
        Insurerfk, 
        "SUM",
        case when (IsIncome = 1) and (KBKFK = 39210202010061000160) then "SUM" 
           when (IsIncome = 0) and (KBKFK = 39210202010061000160) then -"SUM" 
           else 0 
        end as PAY_SUM_STR, 
          case when (IsIncome = 1) and (KBKFK = 39210202020061000160) then "SUM" 
             when (IsIncome = 0) and (KBKFK = 39210202020061000160) then -"SUM"
          else 0
        end as PAY_SUM_NAK,
        DateBankOut as PayDate
      from
        ASV_Entities.Payment
      where
        (IsFiction = 0) 
        and (IsIncome = 1) 
        and  (not InnerBankDocumentNumber is null)
        and (IsComposite = 0) 
  ) q1                                               
  full join  
  (
      /* внебанковские "парные" расходные платежи */
      select 
        Id,  
                InnerBankDocumentNumber,
        Insurerfk, 
        "SUM",
        IsFiction,
        case when (not InnerBankDocumentNumber is null) or (not OrdersFolderFK is null) then
          case when (not OrdersFolderFK is null) then 
            case when (OrdersFolderFK->BaseDocumentInternalType = 'ClarifyPayment') or (OrdersFolderFK->BaseDocumentInternalType = 'RepaymentResolution') then 
              cast(OrdersFolderFK->BaseDocumentDate as date)
            else
              DateBankOut
            end  
          else 
            case when (not InnerBankDocumentDate is null) then
              InnerBankDocumentDate  
            else
              DateBankOut
            end
          end  
        else
          DateBankOut       
        end  as PayDate,
        case when (IsIncome = 1) and (KBKFK = 39210202010061000160) then "SUM" 
           when (IsIncome = 0) and (KBKFK = 39210202010061000160) then -"SUM" 
           else 0 
        end as PAY_SUM_STR, 
          case when (IsIncome = 1) and (KBKFK = 39210202020061000160) then "SUM" 
             when (IsIncome = 0) and (KBKFK = 39210202020061000160) then -"SUM"
          else 0
        end as PAY_SUM_NAK
      from
        ASV_Entities.Payment
      where
        (IsIncome = 0)
        and (KBKFK = 39210202010061000160 or KBKFK = 39210202020061000160)
        and (IsComposite = 0)
  ) q2      
  on
    (q1.InsurerFK = q2.InsurerFK and q1.InnerBankDocumentNumber = q2.InnerBankDocumentNumber and q1."SUM" = q2."SUM")    
  )
)
group by 
  EntNmb, God, Kvartal
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38120782
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не читал, но осуждаю :)
Во-первых, скорее всего запрос не виснет, а просто долго делается. Какой размер данных примерно?
Во-вторых, если у вас более-менее современный вариант каше, то там в портале можно посмотреть план запроса. Почитайте его внимательно, там много интересного будет, в частности будет указано, какие индексы используются. Бывает, что используются не те индексы, либо вообще индексы не используются. Навскидку можно попробовать перестроить селективности
Код: sql
1.
d $system.SQL.TuneTable("название таблицы",1,1)


В-третьих, хорошо бы поразбирать запрос на кусочки и проверить, какой именно тормозит, в таком большом с ходу понять мне, например, сложно, что зачем должно делаться.
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38120816
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Получается что тут кроется какой то говнокод.
А ребята там явно работящие!
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38120913
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто работаю еще только 4 месяц... Тот который до меня был раньше ушел и поэтому сижу сам разгребаю... Грамотешки еще не особо хватает. Кстати чо то я прогнал. Запрос действительно работает только думает около 4 минут.
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38120940
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13 ,

Попробуйте включить подсказку %NOUNIONOROPT .
Если подобных запросов много, то лучше на уровне системы.
Не забудьте после этого удалить закешированные запросы и запустите запрос снова: увеличится скорость?
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38121962
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы с радостью, но доступа к самой СУБД я не имею. У меня есть самопальная программа, написанная на Delphi, Которая позволяет мне просматривать таблицы данной БД и делать выбоки из них
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38122067
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13 ,

А в сам запрос вставить подсказку можете?
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38122611
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, могу, только я не пробовал использовать подсказки. Подскажите куда ее надо вставлять
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38122717
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Подскажите куда ее надо вставлятьНепосредственно за FROM (ссылку на документацию дал выше, посмотрите начало страницы).
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38126669
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ужас..
сделайте часть полей через хранимки хотя бы, хотя бы улучшит читабельность кода
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38145667
Андрей Васильевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
узнаю код. это база ПТК АСВ :-)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Помогите отработать говнокод:)
    #38744473
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Васильевичузнаю код. это база ПТК АСВ :-)

Да да... Она самая))) Единственная вещь помоему написанная на СУБД Cache в России
...
Рейтинг: 0 / 0
Помогите отработать говнокод:)
    #38744486
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Андрей Васильевичузнаю код. это база ПТК АСВ :-)

Да да... Она самая))) Единственная вещь помоему написанная на СУБД Cache в РоссииЯ наверно вас удивлю, но на Cache в России написано много проектов, и новые появляется.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите отработать говнокод:)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]