|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
Опять же после нашего великого обновления 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2013, 09:13 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
Не читал, но осуждаю :) Во-первых, скорее всего запрос не виснет, а просто долго делается. Какой размер данных примерно? Во-вторых, если у вас более-менее современный вариант каше, то там в портале можно посмотреть план запроса. Почитайте его внимательно, там много интересного будет, в частности будет указано, какие индексы используются. Бывает, что используются не те индексы, либо вообще индексы не используются. Навскидку можно попробовать перестроить селективности Код: sql 1.
В-третьих, хорошо бы поразбирать запрос на кусочки и проверить, какой именно тормозит, в таком большом с ходу понять мне, например, сложно, что зачем должно делаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2013, 09:42 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
dartveider13Получается что тут кроется какой то говнокод. А ребята там явно работящие! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2013, 10:13 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
Просто работаю еще только 4 месяц... Тот который до меня был раньше ушел и поэтому сижу сам разгребаю... Грамотешки еще не особо хватает. Кстати чо то я прогнал. Запрос действительно работает только думает около 4 минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2013, 11:03 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
dartveider13 , Попробуйте включить подсказку %NOUNIONOROPT . Если подобных запросов много, то лучше на уровне системы. Не забудьте после этого удалить закешированные запросы и запустите запрос снова: увеличится скорость? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2013, 11:22 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
Я бы с радостью, но доступа к самой СУБД я не имею. У меня есть самопальная программа, написанная на Delphi, Которая позволяет мне просматривать таблицы данной БД и делать выбоки из них ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2013, 17:34 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
dartveider13 , А в сам запрос вставить подсказку можете? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2013, 18:24 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
Да, могу, только я не пробовал использовать подсказки. Подскажите куда ее надо вставлять ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2013, 06:20 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
dartveider13Подскажите куда ее надо вставлятьНепосредственно за FROM (ссылку на документацию дал выше, посмотрите начало страницы). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2013, 10:01 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
ужас.. сделайте часть полей через хранимки хотя бы, хотя бы улучшит читабельность кода ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 08:43 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
узнаю код. это база ПТК АСВ :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 11:24 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
Андрей Васильевичузнаю код. это база ПТК АСВ :-) Да да... Она самая))) Единственная вещь помоему написанная на СУБД Cache в России ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2014, 17:02 |
|
Помогите отработать говнокод:)
|
|||
---|---|---|---|
#18+
dartveider13Андрей Васильевичузнаю код. это база ПТК АСВ :-) Да да... Она самая))) Единственная вещь помоему написанная на СУБД Cache в РоссииЯ наверно вас удивлю, но на Cache в России написано много проектов, и новые появляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2014, 17:07 |
|
|
start [/forum/topic.php?fid=39&msg=38120940&tid=1556819]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 275ms |
total: | 399ms |
0 / 0 |