powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Join Predicate Push Down отсутствует ? И что делать ?
12 сообщений из 12, страница 1 из 1
Join Predicate Push Down отсутствует ? И что делать ?
    #39998603
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Есть некая sql функция - там простой селект с группировкой.
Код: plsql
1.
2.
3.
4.
explain ANALYZE
select * from PE.FF_Payments_Balance() AS D
where  439438381 = D.LINK
    AND 1 = D.F_Division



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
HashAggregate  (cost=52.49..52.55 rows=2 width=316) (actual time=0.224..0.228 rows=1 loops=1)
"  Group Key: d.f_division, d.f_subdivision, d.link, d.f_subscr, d.f_sale_categories, d.f_doc_registers, d.f_doc_types, d.f_operation_types, d.f_status, d.f_debts, d.f_payments, d.c_number, d.c_destination, d.b_closed, st.b_closed, st.b_reversed, d.n_amount, d.n_amount_sec, d.d_reverse_date, d.d_date, d.d_post_date, d.n_period, d.n_dt_period, d.b_import, d.s_sequenceid, d.s_owner, d.s_create_date, d.s_modif_date, d.s_creator, d.link_imp"
  ->  Nested Loop  (cost=0.85..52.32 rows=2 width=214) (actual time=0.176..0.189 rows=2 loops=1)
        Join Filter: (d.f_status = st.link)
        Rows Removed by Join Filter: 22
        ->  Seq Scan on fs_status st  (cost=0.00..1.12 rows=12 width=6) (actual time=0.012..0.015 rows=12 loops=1)
        ->  Materialize  (cost=0.85..50.84 rows=2 width=212) (actual time=0.006..0.013 rows=2 loops=12)
              ->  Nested Loop Left Join  (cost=0.85..50.83 rows=2 width=212) (actual time=0.068..0.138 rows=2 loops=1)
                    ->  Append  (cost=0.42..16.92 rows=2 width=201) (actual time=0.035..0.048 rows=1 loops=1)
                          ->  Index Scan using pk_fd_payments_d1_o on fd_payments_d1_o d  (cost=0.42..8.45 rows=1 width=223) (actual time=0.034..0.035 rows=1 loops=1)
                                Index Cond: (link = 439438381)
"                                Filter: (b_transaction AND (1 = f_division) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                          ->  Index Scan using pk_fd_payments_d1_w on fd_payments_d1_w d_1  (cost=0.43..8.46 rows=1 width=179) (actual time=0.011..0.011 rows=0 loops=1)
                                Index Cond: (link = 439438381)
"                                Filter: (b_transaction AND (1 = f_division) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                    ->  Append  (cost=0.43..16.94 rows=2 width=26) (actual time=0.029..0.083 rows=2 loops=1)
                          ->  Index Scan using fd_applications_d1_o_f_payments_d_post_date_f_finances_ex_n_idx on fd_applications_d1_o apl  (cost=0.43..8.46 rows=1 width=26) (actual time=0.020..0.057 rows=2 loops=1)
"                                Index Cond: ((f_payments = d.link) AND (f_payments = 439438381) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                                Filter: ((f_division = 1) AND (f_division = d.f_division) AND (f_subscr = d.f_subscr))
                          ->  Index Scan using fd_applications_d1_w_f_payments_d_post_date_f_finances_ex_n_idx on fd_applications_d1_w apl_1  (cost=0.44..8.47 rows=1 width=26) (actual time=0.013..0.013 rows=0 loops=1)
"                                Index Cond: ((f_payments = d.link) AND (f_payments = 439438381) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                                Filter: ((f_division = 1) AND (f_division = d.f_division) AND (f_subscr = d.f_subscr))
Planning Time: 5.523 ms
Execution Time: 0.471 ms

Все отлично - cardinality estimation правильное, везде где надо index scan.

Если джойнить эту функцию с таблицей, по которой ожидается небольшое кол-во строк (index scan), то происходит fullscan с hash join, хотя ожидается везде index scan с nested loop:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
EXPLAIN
SELECT *
from PE.FD_Debts_Transfers_Documents AS TD
    INNER JOIN  PE.FF_Payments_Balance() AS D ON TD.F_Payments = D.LINK
              AND TD.F_Division = D.F_Division
where TD.F_Division = 1
  AND TD.F_Debts_Transfers = 268021



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Hash Join  (cost=7262597.60..7745501.15 rows=45 width=473)
  Hash Cond: (d.link = td.f_payments)
  ->  GroupAggregate  (cost=7262546.99..7691794.19 rows=3577060 width=298)
"        Group Key: d.f_debts, d.b_closed, st.b_closed, d.f_subdivision, st.b_reversed, d.b_import, d.f_sale_categories, d.f_status, d.f_operation_types, d.f_doc_types, d.s_sequenceid, d.s_creator, d.s_owner, d.n_period, d.n_dt_period, d.d_reverse_date, d.s_modif_date, d.d_post_date, d.d_date, d.f_payments, d.s_create_date, d.n_amount, d.n_amount_sec, d.f_doc_registers, d.c_destination, d.c_number, d.f_subscr, d.link_imp, d.link, d.f_division"
        ->  Sort  (cost=7262546.99..7271489.64 rows=3577060 width=196)
"              Sort Key: d.f_debts, d.b_closed, st.b_closed, d.f_subdivision, st.b_reversed, d.b_import, d.f_sale_categories, d.f_status, d.f_operation_types, d.f_doc_types, d.s_sequenceid, d.s_creator, d.s_owner, d.n_period, d.n_dt_period, d.d_reverse_date, d.s_modif_date, d.d_post_date, d.d_date, d.f_payments, d.s_create_date, d.n_amount, d.n_amount_sec, d.f_doc_registers, d.c_destination, d.c_number, d.f_subscr, d.link_imp, d.link"
              ->  Hash Join  (cost=362938.98..978086.14 rows=3577060 width=196)
                    Hash Cond: (d.f_status = st.link)
                    ->  Hash Right Join  (cost=362937.71..965378.86 rows=3577060 width=194)
                          Hash Cond: ((apl.f_division = d.f_division) AND (apl.f_payments = d.link) AND (apl.f_subscr = d.f_subscr))
                          ->  Append  (cost=0.00..281980.56 rows=6348436 width=26)
                                ->  Seq Scan on fd_applications_d1_o apl  (cost=0.00..37135.30 rows=895346 width=26)
"                                      Filter: ((f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                                ->  Seq Scan on fd_applications_d1_w apl_1  (cost=0.00..213103.08 rows=5453090 width=26)
"                                      Filter: ((f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                          ->  Hash  (cost=209515.16..209515.16 rows=3577060 width=184)
                                ->  Append  (cost=0.00..209515.16 rows=3577060 width=184)
                                      ->  Seq Scan on fd_payments_d1_o d  (cost=0.00..24043.76 rows=389427 width=223)
"                                            Filter: (b_transaction AND (f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                                      ->  Seq Scan on fd_payments_d1_w d_1  (cost=0.00..167586.10 rows=3187633 width=179)
"                                            Filter: (b_transaction AND (f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                    ->  Hash  (cost=1.12..1.12 rows=12 width=6)
                          ->  Seq Scan on fs_status st  (cost=0.00..1.12 rows=12 width=6)
  ->  Hash  (cost=50.59..50.59 rows=2 width=175)
        ->  Bitmap Heap Scan on fd_debts_transfers_documents td  (cost=4.51..50.59 rows=2 width=175)
              Recheck Cond: (f_debts_transfers = 268021)
              Filter: (f_division = 1)
              ->  Bitmap Index Scan on idx_fd_debts_transfers_documents_pe_f_debts_transfers  (cost=0.00..4.51 rows=12 width=0)
                    Index Cond: (f_debts_transfers = 268021)

Пробовал через lateral, но все равно - план такой же как и при обычном джойне:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
EXPLAIN
SELECT *
from PE.FD_Debts_Transfers_Documents AS TD
     INNER JOIN LATERAL
    (
      select * from PE.FF_Payments_Balance() AS d where d.link = TD.F_Payments    and D.F_Division = TD.F_Division
    ) d on TRUE
where TD.F_Division = 1
  AND TD.F_Debts_Transfers = 268021



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Hash Join  (cost=7262597.60..7745501.15 rows=45 width=473)
  Hash Cond: (d.link = td.f_payments)
  ->  GroupAggregate  (cost=7262546.99..7691794.19 rows=3577060 width=298)
"        Group Key: d.f_debts, d.b_closed, st.b_closed, d.f_subdivision, st.b_reversed, d.b_import, d.f_sale_categories, d.f_status, d.f_operation_types, d.f_doc_types, d.s_sequenceid, d.s_creator, d.s_owner, d.n_period, d.n_dt_period, d.d_reverse_date, d.s_modif_date, d.d_post_date, d.d_date, d.f_payments, d.s_create_date, d.n_amount, d.n_amount_sec, d.f_doc_registers, d.c_destination, d.c_number, d.f_subscr, d.link_imp, d.link, d.f_division"
        ->  Sort  (cost=7262546.99..7271489.64 rows=3577060 width=196)
"              Sort Key: d.f_debts, d.b_closed, st.b_closed, d.f_subdivision, st.b_reversed, d.b_import, d.f_sale_categories, d.f_status, d.f_operation_types, d.f_doc_types, d.s_sequenceid, d.s_creator, d.s_owner, d.n_period, d.n_dt_period, d.d_reverse_date, d.s_modif_date, d.d_post_date, d.d_date, d.f_payments, d.s_create_date, d.n_amount, d.n_amount_sec, d.f_doc_registers, d.c_destination, d.c_number, d.f_subscr, d.link_imp, d.link"
              ->  Hash Join  (cost=362938.98..978086.14 rows=3577060 width=196)
                    Hash Cond: (d.f_status = st.link)
                    ->  Hash Right Join  (cost=362937.71..965378.86 rows=3577060 width=194)
                          Hash Cond: ((apl.f_division = d.f_division) AND (apl.f_payments = d.link) AND (apl.f_subscr = d.f_subscr))
                          ->  Append  (cost=0.00..281980.56 rows=6348436 width=26)
                                ->  Seq Scan on fd_applications_d1_o apl  (cost=0.00..37135.30 rows=895346 width=26)
"                                      Filter: ((f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                                ->  Seq Scan on fd_applications_d1_w apl_1  (cost=0.00..213103.08 rows=5453090 width=26)
"                                      Filter: ((f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                          ->  Hash  (cost=209515.16..209515.16 rows=3577060 width=184)
                                ->  Append  (cost=0.00..209515.16 rows=3577060 width=184)
                                      ->  Seq Scan on fd_payments_d1_o d  (cost=0.00..24043.76 rows=389427 width=223)
"                                            Filter: (b_transaction AND (f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                                      ->  Seq Scan on fd_payments_d1_w d_1  (cost=0.00..167586.10 rows=3187633 width=179)
"                                            Filter: (b_transaction AND (f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                    ->  Hash  (cost=1.12..1.12 rows=12 width=6)
                          ->  Seq Scan on fs_status st  (cost=0.00..1.12 rows=12 width=6)
  ->  Hash  (cost=50.59..50.59 rows=2 width=175)
        ->  Bitmap Heap Scan on fd_debts_transfers_documents td  (cost=4.51..50.59 rows=2 width=175)
              Recheck Cond: (f_debts_transfers = 268021)
              Filter: (f_division = 1)
              ->  Bitmap Index Scan on idx_fd_debts_transfers_documents_pe_f_debts_transfers  (cost=0.00..4.51 rows=12 width=0)
                    Index Cond: (f_debts_transfers = 268021)

Что делать то ? Ведущей таблицей в плане должна быть PE.FD_Debts_Transfers_Documents с небольшим кол-вом искомых строк (в плане кстати cardinality estimation для нее правильный) + должен быть nested loop c запросом из PE.FF_Payments_Balance().
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39998969
grgdvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cristiano_Rivaldo,

У функции какие-нибудь атрибуты объявлены??
Ну там STABLE, например.
Какими-нибудь подсказками оптимизатору уже игрались??
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39998978
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cristiano_Rivaldo,

покажите explain для варианта где вместо PE.FF_Payments_Balance() подставлен ваш select ("простой селект с группировкой")
попробуем понять проблема в функции или проблема в финальном запросе который после inline получается.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999168
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Функция объявлена как stable. Но смысл скорее всего не в этом. Потому что план с подставленным запросом(вместо функции) такой же :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Hash Join  (cost=1941746.85..2953553.20 rows=45 width=473)
  Hash Cond: (d_1.link = td.f_payments)
  ->  Finalize GroupAggregate  (cost=1941696.23..2899846.24 rows=3577060 width=298)
"        Group Key: d_1.f_debts, d_1.b_closed, st.b_closed, d_1.f_subdivision, st.b_reversed, d_1.b_import, d_1.f_sale_categories, d_1.f_status, d_1.f_operation_types, d_1.f_doc_types, d_1.s_sequenceid, d_1.s_creator, d_1.s_owner, d_1.n_period, d_1.n_dt_period, d_1.d_reverse_date, d_1.s_modif_date, d_1.d_post_date, d_1.d_date, d_1.f_payments, d_1.s_create_date, d_1.n_amount, d_1.n_amount_sec, d_1.f_doc_registers, d_1.c_destination, d_1.c_number, d_1.f_subscr, d_1.link_imp, d_1.link, d_1.f_division"
        ->  Gather Merge  (cost=1941696.23..2452713.74 rows=3577060 width=222)
              Workers Planned: 4
              ->  Partial GroupAggregate  (cost=1940696.17..2025651.35 rows=894265 width=222)
"                    Group Key: d_1.f_debts, d_1.b_closed, st.b_closed, d_1.f_subdivision, st.b_reversed, d_1.b_import, d_1.f_sale_categories, d_1.f_status, d_1.f_operation_types, d_1.f_doc_types, d_1.s_sequenceid, d_1.s_creator, d_1.s_owner, d_1.n_period, d_1.n_dt_period, d_1.d_reverse_date, d_1.s_modif_date, d_1.d_post_date, d_1.d_date, d_1.f_payments, d_1.s_create_date, d_1.n_amount, d_1.n_amount_sec, d_1.f_doc_registers, d_1.c_destination, d_1.c_number, d_1.f_subscr, d_1.link_imp, d_1.link, d_1.f_division"
                    ->  Sort  (cost=1940696.17..1942931.84 rows=894265 width=196)
"                          Sort Key: d_1.f_debts, d_1.b_closed, st.b_closed, d_1.f_subdivision, st.b_reversed, d_1.b_import, d_1.f_sale_categories, d_1.f_status, d_1.f_operation_types, d_1.f_doc_types, d_1.s_sequenceid, d_1.s_creator, d_1.s_owner, d_1.n_period, d_1.n_dt_period, d_1.d_reverse_date, d_1.s_modif_date, d_1.d_post_date, d_1.d_date, d_1.f_payments, d_1.s_create_date, d_1.n_amount, d_1.n_amount_sec, d_1.f_doc_registers, d_1.c_destination, d_1.c_number, d_1.f_subscr, d_1.link_imp, d_1.link"
                          ->  Hash Join  (cost=198742.01..412295.17 rows=894265 width=196)
                                Hash Cond: (d_1.f_status = st.link)
                                ->  Parallel Hash Left Join  (cost=198740.74..409117.40 rows=894265 width=194)
                                      Hash Cond: ((d_1.f_division = apl_1.f_division) AND (d_1.link = apl_1.f_payments) AND (d_1.f_subscr = apl_1.f_subscr))
                                      ->  Parallel Append  (cost=0.00..140700.63 rows=894265 width=184)
                                            ->  Parallel Seq Scan on fd_payments_d1_w d_1  (cost=0.00..117775.87 rows=796908 width=179)
"                                                  Filter: (b_transaction AND (f_division = 1) AND (d_post_date <= to_date('20790606'::text, 'YYYYMMDD'::text)))"
                                            ->  Parallel Seq Scan on fd_payments_d1_o d  (cost=0.00..18453.44 rows=125622 width=223)
"                                                  Filter: (b_transaction AND (f_division = 1) AND (d_post_date <= to_date('20790606'::text, 'YYYYMMDD'::text)))"
                                      ->  Parallel Hash  (cost=160116.35..160116.35 rows=1587108 width=26)
                                            ->  Parallel Append  (cost=0.00..160116.35 rows=1587108 width=26)
                                                  ->  Parallel Seq Scan on fd_applications_d1_w apl_1  (cost=0.00..127898.33 rows=1363272 width=26)
"                                                        Filter: ((f_division = 1) AND (d_post_date <= to_date('20790606'::text, 'YYYYMMDD'::text)))"
                                                  ->  Parallel Seq Scan on fd_applications_d1_o apl  (cost=0.00..24282.48 rows=288821 width=26)
"                                                        Filter: ((f_division = 1) AND (d_post_date <= to_date('20790606'::text, 'YYYYMMDD'::text)))"
                                ->  Hash  (cost=1.12..1.12 rows=12 width=6)
                                      ->  Seq Scan on fs_status st  (cost=0.00..1.12 rows=12 width=6)
  ->  Hash  (cost=50.59..50.59 rows=2 width=175)
        ->  Bitmap Heap Scan on fd_debts_transfers_documents td  (cost=4.51..50.59 rows=2 width=175)
              Recheck Cond: (f_debts_transfers = 268021)
              Filter: (f_division = 1)
              ->  Bitmap Index Scan on idx_fd_debts_transfers_documents_pe_f_debts_transfers  (cost=0.00..4.51 rows=12 width=0)
                    Index Cond: (f_debts_transfers = 268021)
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999169
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну почти такой же
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999177
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На всякий случай :

Код: plsql
1.
2.
3.
4.
5.
EXPLAIN ANALYZE
SELECT *
from PE.FD_Debts_Transfers_Documents AS TD
where TD.F_Division = 1
  AND TD.F_Debts_Transfers = 268021



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Bitmap Heap Scan on fd_debts_transfers_documents td  (cost=4.51..50.59 rows=2 width=175) (actual time=0.039..0.041 rows=1 loops=1)
  Recheck Cond: (f_debts_transfers = 268021)
  Filter: (f_division = 1)
  Heap Blocks: exact=1
  ->  Bitmap Index Scan on idx_fd_debts_transfers_documents_pe_f_debts_transfers  (cost=0.00..4.51 rows=12 width=0) (actual time=0.027..0.028 rows=1 loops=1)
        Index Cond: (f_debts_transfers = 268021)
Planning Time: 0.241 ms
Execution Time: 0.185 ms
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999181
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форуме оказывается уже был подобный топик - Отсутствие JPPD оптимизации как класса
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999189
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cristiano_Rivaldo
Функция объявлена как stable. Но смысл скорее всего не в этом. Потому что план с подставленным запросом(вместо функции) такой же :


как в общем и ожидалось...
что можно посоветовать сделать
я бы сделал функцию PE.FF_Payments_Balance(division, link)
и использовал бы ее с lateral join
в этой задаче.

фактически ручной "Join Predicate Push Down" организовал бы.

Кстати не то чтобы его нет в вашем случае... потому что константы (f_division = 1) или 39438381 = D.LINK - база уже умеет пробрасывать...
а вот в joins с полями - нет судя по всему.

А на всякий случай попробуйте сделать explain запроса перед этим выполнив set enable_seq_scan to 0; set enable_hashjoin to 0;
и потом explain (стоит проверить теорию что jppd не срабатывает потому что оценка стоимости неверная).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999218
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET ENABLE_SEQSCAN TO OFF;
set enable_hashjoin to OFF;
EXPLAIN
SELECT *
from PE.FD_Debts_Transfers_Documents AS TD
    INNER JOIN  PE.FF_Payments_Balance() AS D ON TD.F_Payments = D.LINK
              AND TD.F_Division = D.F_Division
where td.F_Division = 1
  AND TD.F_Debts_Transfers = 268021



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Merge Join  (cost=7228556.04..7702625.15 rows=45 width=474)
  Merge Cond: (d.link = td.f_payments)
  ->  GroupAggregate  (cost=7228505.39..7657850.39 rows=3577875 width=299)
"        Group Key: d.link, st.b_closed, d.f_debts, d.f_subdivision, st.b_reversed, d.b_import, d.b_closed, d.f_sale_categories, d.f_status, d.f_operation_types, d.f_doc_types, d.s_sequenceid, d.s_creator, d.s_owner, d.n_period, d.n_dt_period, d.d_reverse_date, d.s_modif_date, d.d_post_date, d.d_date, d.f_payments, d.s_create_date, d.n_amount, d.n_amount_sec, d.f_doc_registers, d.c_destination, d.c_number, d.f_subscr, d.link_imp, d.f_division"
        ->  Sort  (cost=7228505.39..7237450.07 rows=3577875 width=197)
"              Sort Key: d.link, st.b_closed, d.f_debts, d.f_subdivision, st.b_reversed, d.b_import, d.b_closed, d.f_sale_categories, d.f_status, d.f_operation_types, d.f_doc_types, d.s_sequenceid, d.s_creator, d.s_owner, d.n_period, d.n_dt_period, d.d_reverse_date, d.s_modif_date, d.d_post_date, d.d_date, d.f_payments, d.s_create_date, d.n_amount, d.n_amount_sec, d.f_doc_registers, d.c_destination, d.c_number, d.f_subscr, d.link_imp"
              ->  Merge Left Join  (cost=1.88..1887379.14 rows=3577875 width=197)
                    Merge Cond: (d.link = apl.f_payments)
                    Join Filter: ((apl.f_division = d.f_division) AND (apl.f_subscr = d.f_subscr))
                    ->  Nested Loop  (cost=1.00..1031823.70 rows=3577875 width=187)
                          ->  Merge Append  (cost=0.86..490142.91 rows=3577875 width=185)
                                Sort Key: d.link
                                ->  Index Scan using pk_fd_payments_d1_o on fd_payments_d1_o d  (cost=0.42..31542.14 rows=389428 width=223)
"                                      Filter: (b_transaction AND (f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                                ->  Index Scan using pk_fd_payments_d1_w on fd_payments_d1_w d_1  (cost=0.43..422822.01 rows=3188447 width=180)
"                                      Filter: (b_transaction AND (f_division = 1) AND (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone))"
                          ->  Index Scan using pk_fs_status on fs_status st  (cost=0.14..0.15 rows=1 width=6)
                                Index Cond: (link = d.f_status)
                    ->  Materialize  (cost=0.88..735518.11 rows=6348151 width=26)
                          ->  Merge Append  (cost=0.88..719647.73 rows=6348151 width=26)
                                Sort Key: apl.f_payments
                                ->  Index Scan using fd_applications_d1_o_f_payments_d_post_date_f_finances_ex_n_idx on fd_applications_d1_o apl  (cost=0.43..87931.92 rows=895346 width=26)
"                                      Index Cond: (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone)"
                                      Filter: (f_division = 1)
                                ->  Index Scan using fd_applications_d1_w_f_payments_d_post_date_f_finances_ex_n_idx on fd_applications_d1_w apl_1  (cost=0.44..568234.29 rows=5452805 width=26)
"                                      Index Cond: (d_post_date <= (to_date('20790606'::text, 'YYYYMMDD'::text))::timestamp with time zone)"
                                      Filter: (f_division = 1)
  ->  Sort  (cost=50.60..50.61 rows=2 width=175)
        Sort Key: td.f_payments
        ->  Bitmap Heap Scan on fd_debts_transfers_documents td  (cost=4.51..50.59 rows=2 width=175)
              Recheck Cond: (f_debts_transfers = 268021)
              Filter: (f_division = 1)
              ->  Bitmap Index Scan on idx_fd_debts_transfers_documents_pe_f_debts_transfers  (cost=0.00..4.51 rows=12 width=0)
                    Index Cond: (f_debts_transfers = 268021)
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999223
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cristiano_Rivaldo,

угу... тогда скорее всего только ручной push down через создание функции с параметрами и пробросом их внутрь запроса явно.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999226
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Являетесь ли вы коммитером ? Можете написать об этой проблеме куда надо ? Я считаю что проблема очень актуальная... Кучу кода нужно будет переписывать и переосмысливать. Особенно это ждет тех,кто занимается переносом кода(архитектуры) с MS SQL или Oracle.
...
Рейтинг: 0 / 0
Join Predicate Push Down отсутствует ? И что делать ?
    #39999253
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cristiano_Rivaldo
Maxim Boguk,

Являетесь ли вы коммитером ? Можете написать об этой проблеме куда надо ? Я считаю что проблема очень актуальная... Кучу кода нужно будет переписывать и переосмысливать. Особенно это ждет тех,кто занимается переносом кода(архитектуры) с MS SQL или Oracle.


Не являюсь, но достаточно близок к разработке PostgreSQL чтобы сказать что ответ будет "patches welcome" или предложение проспонсировать разработку требуемой вам функциональности... и года через 2-3 - может будет в production версии (15 или 16).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Join Predicate Push Down отсутствует ? И что делать ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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