Autor Téma: Pomôže rozšírenie WHERE  (Přečteno 536 krát)

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5559
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Pomôže rozšírenie WHERE
« kdy: 01-04-2020, 12:47:32 »
Mám FKFOCS, FKSERPAR - cudzie kľúče a YEARS
FKSERPAR je unikátne pre každú dvojicu FKFOCS a YEARS
Prvý prípad. Tak to mám teraz
Kód: [Vybrat]
WHERE FKSERPAR = :FKSERPAR Ak podmienku rozšírim, bude vykonanie dopytu rýchlejšie?
Kód: [Vybrat]
WHERE FKFOCS = :FKFOCS AND YEARS = :YEARS AND FKSERPAR = :FKSERPAR
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1132
  • Karma: 49
    • Verze Delphi: 10.3
Re:Pomôže rozšírenie WHERE
« Odpověď #1 kdy: 01-04-2020, 14:04:28 »
Nebude nejjednodušší to prostě vyzkoušet?

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5559
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Pomôže rozšírenie WHERE
« Odpověď #2 kdy: 01-04-2020, 14:26:39 »
Teraz mám veľmi malý počet v záznamov. Takže žiaden rozdiel nezistím.
Dúfal som, že niekto s tým má všeobecnú skúsenosť.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3089
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Pomôže rozšírenie WHERE
« Odpověď #3 kdy: 01-04-2020, 16:12:10 »
Teraz mám veľmi malý počet v záznamov. Takže žiaden rozdiel nezistím.
Dúfal som, že niekto s tým má všeobecnú skúsenosť.
Uz jsem ti na tohle tema psal, ze nema smysl vest nejake intelektualni seance a je treba se obratit na plan analyzer -> ten ti rozlozi dotaz bez ohledu na mnozstvi dat a ukaze, jestli tam nemas nejakou botu a neleze ti z toho napr. full scan kvuli absenci indexu.

A o tom, jake indexy a jak optimizer pouzije uz je otazka optimalizace na konkretnim RDBMS a pokud nemas data, jedna se o premature optimalizaci.
V danem pripade, pokud je FK unikatni, tak ma nejnizsi selektivitu a tudiz nema smysl mu pridavat dalsi podminky.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5559
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Pomôže rozšírenie WHERE
« Odpověď #4 kdy: 01-04-2020, 19:11:00 »
Citace
Uz jsem ti na tohle tema psal, ze...
Áno, len nedávno. Myslím na to. Posledná veta je to čo, som chcel vedieť.
Ďakujem.
Žiaľ, v niektorých prípadoch mám Natural a neviem sa ho zbaviť. Utešujem sa skutočnosťou, že tam bude maximálne pár tisíc záznamov.
Napríklad:
Kód: [Vybrat]
Plan:
PLAN JOIN (SORT (JOIN (SR N NATURAL, SR I_S INDEX (FK_INVOICE_SAC_SERPAR))), JOIN (SP INDEX (PK_SERVICEPARAMETERS), N INDEX (FK_Z_CONS_NUMBER_SEPA, FK_Z_CONS_NUMBER_ANOP,
 FK_Z_CONS_NUMBER_SAC)))
Adapted plan:
PLAN JOIN (SORT (JOIN (SR N NATURAL, SR I_S INDEX (FK_INVOICE_SAC_SERPAR))), JOIN (SP INDEX (PK_SERVICEPARAMETERS), N INDEX (FK_Z_CONS_NUMBER_SEPA, FK_Z_CONS_NUMBER_ANOP,
 FK_Z_CONS_NUMBER_SAC)))
Predpokladám, že sa týka indexu SR I_S INDEX (FK_INVOICE_SAC_SERPAR))). Viď grafickú podobu dopytu.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5559
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Pomôže rozšírenie WHERE
« Odpověď #5 kdy: 01-04-2020, 19:13:27 »
Ešte dodatok, že optimalizáciu ešte len budem robiť nad vygenerovanými testovacími údajmi. Žiaľ, pri zostavovaní dopytov som nepoužíval kontrolu analyzátorom - plánom. To som ho ešte nemal, ani som o niečom takom netušil.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Palino

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
    • Verze Delphi: 7, XE, Seattle
Re:Pomôže rozšírenie WHERE
« Odpověď #6 kdy: 08-01-2021, 13:19:16 »
Ak v datach/vysledku nie je rozdie medzi

WHERE FKSERPAR = :FKSERPAR  vs. WHERE FKFOCS = :FKFOCS AND YEARS = :YEARS AND FKSERPAR = :FKSERPAR

co znaci ze FKSERPAR je jednoznacny (podmienka na YEARS a FKSERPAR neomedzi vysledok),  nema vyznam pridavat dalsie podmienky (prida pracu porovnavat udaje ktore vobec netreba porovnavat). Hlavne pri pridani stlpcov ktore nie su indexovane (moj predpoklad years) a server musi pristupit priamo na udaj s hodnotou na datovu stranku v DBsubore.

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 123
  • Karma: 0
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Pomôže rozšírenie WHERE
« Odpověď #7 kdy: 13-01-2021, 09:51:15 »
WHERE ma smysl rozsirovat, pokud existují na podmínku indexy, ktere ti omezi rozsah dat - hlavne clustrovany index. Relace (cizi klice) jako index neslouzi.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3089
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Pomôže rozšírenie WHERE
« Odpověď #8 kdy: 13-01-2021, 11:06:55 »
Relace (cizi klice) jako index neslouzi.
Jasne, napr. u MSSQL vedle FK constraintu musis extra nadefinovat index.

Ale mam dojem, ze zrovna u FB to tak neni, ze tam se FK contraint definuje jako index a RDBMS ho jako index automaticky pouzije. Ale uz je to dlouho, co jsem s FB neco delal a nemam ji ani ninstalovanou, abych se podival, jak to vypadalo v projektech, kde jsme ji pouzivali.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1132
  • Karma: 49
    • Verze Delphi: 10.3
Re:Pomôže rozšírenie WHERE
« Odpověď #9 kdy: 13-01-2021, 18:42:00 »
Excellent
Rated 1 time
Relace (cizi klice) jako index neslouzi.
Jasne, napr. u MSSQL vedle FK constraintu musis extra nadefinovat index.

Ale mam dojem, ze zrovna u FB to tak neni, ze tam se FK contraint definuje jako index a RDBMS ho jako index automaticky pouzije.

Ano, je to tak, Firebird umí FOREING KEY použít jako index:

Kód: [Vybrat]
Plan
PLAN (A INDEX (RDB$FOREIGN279))