Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#1

Performance Einbruch FB 2.5 bei Abfrage auf zusätzliches Feld

  Alt 27. Jan 2022, 16:22
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC
Gegeben ist folgende Abfrage:
Code:
select
    lsptext.art,
    lsptext."POSITION" Pos,
    lsptext.textline
from sendpos
left outer join lscoll on lscoll.lskopf_id = sendpos.lskopf_id
inner join lspack on
  lspack.lskopf_id = lscoll.lskopf_id
  and lspack.colli_nr = lscoll.colli_nr
inner join lsptext on
   lsptext.lspos_id = lspack.lspos_id
   and lsptext.art in ('G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'D1', 'D2', 'D3', 'D4', 'D5') -- JOIN
where sendpos.sendk_id = 101821515
Die Ausführungszeit beträgt ~ 0.7s, Datenmenge ist 1.

Will ich nun zusätzlich das "POSITION" Feld abfragen, so erhöht sich die Abfragezeit auf ~5 s. Dabei spielt das Abfragekonstrukt keine Rolle:

Abfrage mit JOIN erweitert
Code:
and lsptext."POSITION" = 25
Abfrage als Subquery
Code:
select x.* from
(
-- <obige Query>
) x
where x.Pos = 25
Abfrage mit WHERE erweitert
Code:
and lsptext."POSITION" = 25
Alle relevanten Felder sind indiziert

Code:
CREATE TABLE LSPTEXT
(
  ID   DOUBLE PRECISION NOT NULL,
  LSKOPF_ID   DOUBLE PRECISION,
  LSPOS_ID   DOUBLE PRECISION,
  "POSITION"  SMALLINT,
  KSL   SMALLINT,
  ART   CHAR(4),
  TEXTLINE   CHAR(132),
CONSTRAINT PK_LSPTEXT PRIMARY KEY (ID)
);

/*  Index definitions for LSPTEXT */

CREATE INDEX LSPTEXT_ART ON LSPTEXT(ART);
CREATE INDEX LSPTEXT_ID ON LSPTEXT(ID);
CREATE INDEX LSPTEXT_LSKOPF_ID ON LSPTEXT(LSKOPF_ID);
CREATE INDEX LSPTEXT_LSPOS_ID ON LSPTEXT(LSPOS_ID);
CREATE INDEX LSPTEXT_POSITION ON LSPTEXT("POSITION");
Laut PLAN werden die auch benutzt:
Code:
Select - PLAN JOIN (JOIN (JOIN (SENDPOS INDEX (SENDPOS_LSNR), LSCOLL INDEX (LSCOLL_LSKOPF_ID)), LSPACK INDEX (LSPACK_LSKOPF_ID, LSPACK_COLLI_NR)), LSPTEXT INDEX (LSPTEXT_LSPOS_ID, LSPTEXT_POSITION))
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat