powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / При анализе NULL, скорость запроса падает значительно
7 сообщений из 7, страница 1 из 1
При анализе NULL, скорость запроса падает значительно
    #36971699
База IBM DB2
Таблица платежей PAY: num, id, suma, month
Где num - ключ по платежам, id - код плательщика, suma - сума оплаты и date - пата платежа
Выбираю по оплатам за определенный месяц
Selecеt id, sum(summa) summa
From pay
Where month =11
Group by id
Группировку использую , т.к. их может быть несколько

2-я таблица по счетам аналогичная первой: Saldo: num, id, suma, month
И выбор тоже
Select id, sum(summa) summa
From saldo
Where month =11
Group by id

Теперь вывожу остаток как разницу между сальдо и оплатой т.е. задолженность
Select id, saldo1.summa-pay1.summa debet
From(Selec id, sum(summa) summa
From saldo
Where month =11
Group by id
)saldo1,
(Selec id, sum(summa) summa
From pay
Where month =11
Group by id
) pay1
Where saldo1.id=pay1.id
И этот запрос верен только в идеале, когда все клиенты платили в этом месяце,
Однако если кто-то не заплатил то pay.sum(summa) равна NULL и вычисление saldo1.summa-pay1.summa debet тоже дает NULL, что, естественно

Выход напрашивается такой:
Select id, saldo1.summa- coalesce(pay1.summa,0) debet
From(Selec id, sum(summa) summa
From saldo
Where month =11
Group by id
)saldo1,
(Select id, sum(summa) summa
From pay
Where month =11
Group by id
) pay1
Where saldo1.id=pay1.id

Вместо coalesce можно использовать case-when-else-end, но на скорость запроса это не влияет которая очень большая запрос без отсева NULL на 300 000 записях работает 1.5 сек
А на таком запросе до 10 мин. А учитывая что надо сопостовлять по нескольким месяцам, работа запроса становиться не приемлемо долгой.
Как быть? как можно обойти появления NULL при вычислении не слишком уменьшаяя скорость запроса?
...
Рейтинг: 0 / 0
При анализе NULL, скорость запроса падает значительно
    #36971842
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какая версия db2?
Планы запросов сравнивали?
Утилитой db2batch умеете пользоваться?
...
Рейтинг: 0 / 0
При анализе NULL, скорость запроса падает значительно
    #36971911
Версия IBM DB2: v8.1.10.1155
С утилитой db2batch не знаком, сейчас поищу в Интернете,
За план запросов - не смотрел, мне казалось, что сам по себе IBM DB2 не причем, а coalesce всегда так отрабатывает, и наверно должно быть академическое решение этой проблемы, еще и БД работает удовлетворительно и ради ускорения 1-го запроса никто мне настройки БД не даст менять.
...
Рейтинг: 0 / 0
При анализе NULL, скорость запроса падает значительно
    #36971985
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
db2batch -d dbname -f sql.txt -r out.txt,out2.txt -c off -i complete -s on -o p 5 e 2
db2exfmt -d dbname -g -o sql.plan -n %% -s %% -# 0 -w -1
...
Рейтинг: 0 / 0
При анализе NULL, скорость запроса падает значительно
    #36975195
Выход на нашел такой:
Select id, saldo-pay as dabet
From(
Select id, sum(summa1) saldo , sum( summa2) pay
From(
Selec id, sum(summa) summa1, 0 as summa2
From saldo
Where month =11
Group by id
union
Selec id, 0 as summa1, sum(summa) summa2
From pay
Where month =11
Group by id
) x1
Group by id
) x2
Выполняется быстро т.к. время на поиски null не тратятся, null из накладывается на 0 при выполнении union и не используется coalesce
...
Рейтинг: 0 / 0
При анализе NULL, скорость запроса падает значительно
    #36981342
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А данный запрос разве не решит проблем?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select id,sum(suma) as debet from
(
select id, suma from Saldo
Where month = 11 
union all 
select id, -suma from pay
)
group by id
...
Рейтинг: 0 / 0
При анализе NULL, скорость запроса падает значительно
    #36986220
Согласен, изящно, спасибо Troglodit, буду использовать.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / При анализе NULL, скорость запроса падает значительно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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