Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
При анализе NULL, скорость запроса падает значительно
|
|||
|---|---|---|---|
|
#18+
База 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 при вычислении не слишком уменьшаяя скорость запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2010, 12:59 |
|
||
|
При анализе NULL, скорость запроса падает значительно
|
|||
|---|---|---|---|
|
#18+
Какая версия db2? Планы запросов сравнивали? Утилитой db2batch умеете пользоваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2010, 13:41 |
|
||
|
При анализе NULL, скорость запроса падает значительно
|
|||
|---|---|---|---|
|
#18+
Версия IBM DB2: v8.1.10.1155 С утилитой db2batch не знаком, сейчас поищу в Интернете, За план запросов - не смотрел, мне казалось, что сам по себе IBM DB2 не причем, а coalesce всегда так отрабатывает, и наверно должно быть академическое решение этой проблемы, еще и БД работает удовлетворительно и ради ускорения 1-го запроса никто мне настройки БД не даст менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2010, 13:58 |
|
||
|
При анализе NULL, скорость запроса падает значительно
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2010, 14:21 |
|
||
|
При анализе NULL, скорость запроса падает значительно
|
|||
|---|---|---|---|
|
#18+
Выход на нашел такой: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2010, 18:14 |
|
||
|
При анализе NULL, скорость запроса падает значительно
|
|||
|---|---|---|---|
|
#18+
А данный запрос разве не решит проблем? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2010, 02:08 |
|
||
|
|

start [/forum/search_topic.php?author=n0ther&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 444ms |
| total: | 587ms |

| 0 / 0 |
