Skip to content

OuterJoinConversion parameter set to True decreases Firebird performance #8770

@tomaszdubiel18

Description

@tomaszdubiel18

Official Firebird 3.0.13.
select T.NAZWA from TECHNOLOGIA T join OPERACJATECH OT on (T.ID_TECHNOLOGIA = OT.ID_TECHNOLOGIA) left outer join OPERACJATECHBOM OB on (OB.ID_OPERACJATECH = OT.ID_OPERACJATECH) left outer join BOMITEM_VIEW BI on (BI.ID_BOM = OB.ID_BOM) where BI.RODZAJ in (0, 1, 2) and T.STATUS = 1
Plan:
PLAN JOIN (JOIN (JOIN (T INDEX (MK_TECHNOLOGIA_STATUS), OT INDEX (FK_OPERACJATECH_TECHNOLOGIA)), OB INDEX (FK_OPERACJATECHBOM_OPERACJATECH)), JOIN (JOIN (BI BI INDEX (FK_BOMITEM_BOM), BI K INDEX (PK_KARTOTEKA)), BI M INDEX (PK_MAGAZYN)), JOIN (JOIN (BI BI INDEX (FK_BOMITEM_BOM), BI F INDEX (PK_FANTOM)), BI M INDEX (PK_MAGAZYN)))
Image
Official Firebird 5.0.3:
Plan:
PLAN HASH (JOIN (HASH (BI BI NATURAL, BI K NATURAL), BI M INDEX (PK_MAGAZYN)), JOIN (JOIN (BI F NATURAL, BI BI INDEX (FK_BOMITEM_FANTOM)), BI M INDEX (PK_MAGAZYN)), JOIN (JOIN (T INDEX (MK_TECHNOLOGIA_STATUS), OT INDEX (FK_OPERACJATECH_TECHNOLOGIA)), OB INDEX (FK_OPERACJATECHBOM_OPERACJATECH)))
Image
With parameter set to False, everything works as expected.
Below the DDL of the view:
CREATE OR ALTER VIEW BOMITEM_VIEW( ID_BOMITEM, ID_BOM, ID_BOMITEM_MAIN, ID_KARTOTEKA, ID_FANTOM, RODZAJ, LP, INDEKS, NAZWASKR, NAZWA, RODZAJMAT, ILOSC, WARTOSC, NARZUT, RODZAJCENY, AKTYWNY, WARIANTOWY, OPCJONALNY, OPCJAWYBRANA, ROZLICZBEZDOK, KARTOTEKA, ID_MAGAZYN, NAZWAMAG, POZIOM, ID_WYBRANYWARIANT, NIEWIDOCZNY, UZGODNIONY, CENA, RODZAJREALIZ, ZAPLANDOST, CZASOCZEKIWANIA) AS select BI.ID_BOMITEM, BI.ID_BOM, BI.ID_BOMITEM_MAIN, K.ID_KARTOTEKA, null, BI.Rodzaj, BI.Lptree, K.INDEKS, K.NAZWASKR, K.NAZWADL, BI.RODZAJMAT, BI.ILOSC, BI.WARTOSC, BI.NARZUT, BI.RODZAJCENY, BI.AKTYWNY, BI.WARIANTOWY, BI.OPCJONALNY, BI.OPCJAWYBRANA, BI.ROZLICZBEZDOK, BI.KARTOTEKA, M.ID_MAGAZYN, M.NAZWAMAG, BI.POZIOM, BI.ID_BOMITEMWYBRANY, BI.NIEWIDOCZNY, BI.UZGODNIONY, BI.CENA, BI.RODZAJREALIZ, BI.ZAPLANDOST, BI.CZASOCZEKIWANIA from BOMITEM BI join KARTOTEKA K on (K.ID_KARTOTEKA = BI.ID_KARTOTEKA) left outer join MAGAZYN M on (M.ID_MAGAZYN = BI.ID_MAGAZYN) union all select BI.ID_BOMITEM, BI.ID_BOM, BI.ID_BOMITEM_MAIN, null, F.Id_Fantom, BI.Rodzaj, BI.Lptree, F.INDEKS, F.INDEKS, F.Nazwa, BI.RODZAJMAT, BI.ILOSC, BI.WARTOSC, BI.NARZUT, BI.RODZAJCENY, BI.AKTYWNY, BI.WARIANTOWY, BI.OPCJONALNY, BI.OPCJAWYBRANA, BI.ROZLICZBEZDOK, BI.KARTOTEKA, M.ID_MAGAZYN, M.NAZWAMAG, BI.POZIOM, BI.ID_BOMITEMWYBRANY, BI.NIEWIDOCZNY, BI.UZGODNIONY, BI.CENA, BI.RODZAJREALIZ, BI.ZAPLANDOST, BI.CZASOCZEKIWANIA from BOMITEM BI join FANTOM F on (F.Id_Fantom = BI.Id_Fantom) left outer join MAGAZYN M on (M.ID_MAGAZYN = BI.ID_MAGAZYN) ;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions