Hello, All!

Коллеги переводят большую БД с 1.5 на 2.1, и часть запросов стала выполняться много медленнее.

В частном случае, поменялся порядок таблиц - натуралом сервер стал идти по самой большой. Подробные данные ниже. Из изменений, который могли повлиять я увидел только посегментную статистику. И походже оптимизатору не на что опереться, для принятия оптимального решения.

Ну а кол-во строк в таблице он не оценивает, та ведь?

Собсно вопрос - предположения правильны и выхода как кроме +0(вроде как там запросов у них много) нет?

TABLE_BIG = 2млн (PSG)
TABLE_SMALL = 2тыс (SA)
TABLE_MEDIUM = 20тыс (PG)

select SUM(PG.DEBIT), COUNT(DISTINCT SA.ORGANIZATION_ID)
from TABLE_SMALL SA
join  TABLE_BIG PG on pg.organization_id = sa.organization_id
join  TABLE_MEDIUM PSG on psg.id = pg.drugs_id
where sa.cluster_id = :v_cluster_id and sa.type_org_id = :v_type_org_id


FB 1.5
plan join (sa natural, pg index (table_big_idx1), psg index (pk_table_medium))

FB 2.1.1 (с последней одс, после рестора)
plan join (psg natural, pg index (table_big_idx3), sa index (table_small_org_idx))

create index table_small_org_idx on table_small (organization_id); (0,000577)

alter table table_medium add constraint pk_table_medium primary key (id); (0,000049)

create index table_big_idx1 on table_big (organization_id, drugs_id); (0,0000004)
селективность первого сегмента хуже TABLE_BIG_IDX1 = 0,000502260169

create index table_big_idx3 on table_big (drugs_id, type_org_id, city_id); (0,00000111)
селективность первого сегмента TABLE_BIG_IDX3 = 0,0000373343282

--
-=Убежать от взрывной волны можно. Просто надо выбегать заранее.=-
With best regards, Nikolay Ponomarenko

Ответить