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.