Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#8

AW: Index geschickt setzen für Tabellenvergleich

  Alt 25. Mär 2021, 18:49
Vor 'nem Concat über alle Spalten würd' ich zuerst mal 'nen Index über alle Spalten versuchen.

Not Exists ist ohne einen passenden Index vermutlich auch nicht gerade schnell.

Was noch gehen könnte, weiß aber nicht ob MariaDB sowas unterstütz, unter Oracle müsste es in etwa so aussehen:
SQL-Code:
select FirmenNummer, Abteilungsnummer, PersonenNummer, Kennzeichen, Tag, Dauer from Heute
minus
select FirmenNummer, Abteilungsnummer, PersonenNummer, Kennzeichen, Tag, Dauer from Gestern
Laut dieser Seite How to use Minus in MySQL or MairaDB geht es wohl nicht und da wird dann der bereits von Dir genutzte Weg als Alternative vorgeschlagen.

Das Not Exists würd' ich etwas abändern:
SQL-Code:
Select Heute.*
From Heute
Where Not Exists (Select 1 From Gestern Where Heute.SpalteMitAllemDrin = Gestern.SpalteMitAllemDrin)
Aber: Das könnte eventuell auch anstelle des Joins machbar sein, in etwa sowas:
SQL-Code:
Select
  Heute.FirmenNummer,
  Heute.Abteilungsnummer,
  Heute.PersonenNummer,
  Heute.Kennzeichen,
  Heute.Tag,
  Heute.Dauer
From Heute
Where Not Exists
  (Select 1 From Gestern
    Where Heute.FirmenNummer = Gestern.FirmenNummer
    And Heute.Abteilungsnummer = Gestern.Abteilungsnummer
    And Heute.PersonenNummer = Gestern.PersonenNummer
    And Heute.Kennzeichen = Gestern.Kennzeichen
    And Heute.Tag = Gestern.Tag
    And Heute.Dauer = Gestern.Dauer
  )
Aber ohne Index in der Art
SQL-Code:
create index ix_gestern on Gestern (FirmenNummer, Abteilungsnummer, PersonenNummer, Kennzeichen, Tag, Dauer);
create index ix_heute on Heute (FirmenNummer, Abteilungsnummer, PersonenNummer, Kennzeichen, Tag, Dauer);
, wird das vermutlich nicht schnell werden.
  Mit Zitat antworten Zitat