Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Access SQL performance (https://www.delphipraxis.net/212777-access-sql-performance.html)

Delphi.Narium 31. Mär 2023 18:25

AW: Access SQL performance
 
Drei Versuche:
SQL-Code:
select
  top 30
  ABFStatKundenNr,
  total
from
(
  select
    ABFStat.ABFStatKundenNr,
    sum(ABFStat.ABFStatUmsatz) as total
  from ABFStat
  where ABFStat.ABFStatDatum > #01/01/2023#
  and exists
  (
    select 1 
    from sPersKto
    where sPersKto.PersKtoArt = 68
    and sPersKto.PersKtoNummer = ABFStat.ABFStatKundenNr
  )
  group by ABFStat.ABFStatKundenNr
)
order by total desc
SQL-Code:
select
  top 30
  ABFStatKundenNr,
  total
from
(
  select
    a.ABFStatKundenNr,
    sum(a.ABFStatUmsatz) as total
  from
    ABFStat a,
    sPersKto b
  where b.PersKtoNummer = a.ABFStatKundenNr
  and b.PersKtoArt = 68
  and a.ABFStatDatum > #01/01/2023#
  group by a.ABFStatKundenNr
)
order by total desc;
SQL-Code:
select
  top 30
  ABFStatKundenNr,
  total
from
(
  select
    a.ABFStatKundenNr,
    sum(a.ABFStatUmsatz) as total
  from
    (select ABFStatKundenNr, ABFStatUmsatz from ABFStat where ABFStatDatum > #01/01/2023#) a, -- Datenmengen möglichst früh eingrenzen
    (select PersKtoNummer from sPersKto where PersKtoArt = 68) b
  where b.PersKtoNummer = a.ABFStatKundenNr -- und erst dann die Teilmengen miteinander verbinden
  group by a.ABFStatKundenNr
)
order by total desc
Und zur Vorbeugung:
Zitat:

Zitat von himitsu (aus einem anderen Thread zum gleichen Themenkomplex)
IHHHHHH, nicht so.

Access kann auch JOINs in Richtig.

Weiß ich, so geht aber auch und ist für ich leichter verständlich ;-)

Fehler im From?
SQL-Code:
select
  Sum(Spaltenname) as AliasName -- as vor den Aliasnamen
from TabellenName Aliasname -- kein as vor den Aliasnamen
group by Spaltenname
Manche Datenbanken kommen in beiden Fällen mit dem AS zurecht.
Manche Datenbanken kommen in beiden Fällen ohne das AS zurecht.
Manche Datenbanken kommen nur im ersten Fall mit dem AS zurecht, aber nicht im zweiten Fall.

Das könnte bei Access die Ursache für den 'Syntaxfehler in FROM-Klausel' sein.

HCB 1. Apr 2023 10:06

AW: Access SQL performance
 
Hallo Dekphi.Narium,

vielen Dank für die 3 Vorschläge. Vorab: Du bist das absolute Genie!!!!!
Folgende Ausführungsgeschwindig habe ich festgestellt:

1. Mein Sql: Exec Time 9,06 sek
2. mit Exist von 'DasWolf': Exec Time 9,09 sek
3. Code 1 von Delphi.Narium: ExecTime 9,00 sek.
4. Code 2 von Delphi.Narium: ExecTime 0,13 sek.
5. Code 3 von Delphi.Narium: ExecTime 0,13 sek.

Das ist der Wahnsinn, man glaubt man hat einen funktionieren SQL Code der das gewünschte Ergebnis bringt und alles ok ist.
Lässt man aber einen absoluten Profi ran, dann merkt man, dass man eigentlich nichts kann :oops:
Vielen Dank an alle, die mir helfen wollten und speziell an den Top-Profi Delphi.Narium für deine Hilfe.

LG Harry

HCB 1. Apr 2023 14:34

AW: Access SQL performance
 
Hallo Delphi.Narium,
ich habe doch noch eine Frage: Wie bekomme ich noch zusätzliche Felder aus der sPersKto unter?
So wie ich es jetzt habe bringt es keinen Fehler und läuft, aber die Felder b.PersKtoName1,b.PersKtoZusInfo1,b.PersKtoPreisGru ppe werden nicht angezeigt.

select
top 30
ABFStatKundenNr,
total
from
(
select
a.ABFStatKundenNr,
sum(a.ABFStatUmsatz) as total,
b.PersKtoName1,b.PersKtoZusInfo1,b.PersKtoPreisGru ppe//Änderung Felder sollen mit angezeigt werden
from
ABFStat a,
sPersKto b
where b.PersKtoNummer = a.ABFStatKundenNr
and b.PersKtoArt = 68
and a.ABFStatDatum > #01/01/2022# and a.ABFStatDatum < #31/12/2022#
group by a.ABFStatKundenNr, b.PersKtoName1, b.PersKtoZusInfo1,b.PersKtoPreisGruppe
)
order by total desc;

Kannst dur mir bitte nochmals helfen?

LG Harry

HCB 1. Apr 2023 14:42

AW: Access SQL performance
 
Ok erledigt! Habs so gemacht:
select
top 30
ABFStatKundenNr,
total,
PersKtoName1, PersKtoZusInfo1, PersKtoPreisGruppe
from
(
select
a.ABFStatKundenNr,
sum(a.ABFStatUmsatz) as total,
b.PersKtoName1,b.PersKtoZusInfo1,b.PersKtoPreisGru ppe
from
ABFStat a,
sPersKto b
where b.PersKtoNummer = a.ABFStatKundenNr
and b.PersKtoArt = 68
and a.ABFStatDatum > #01/01/2022# and a.ABFStatDatum < #31/12/2022#
group by a.ABFStatKundenNr, b.PersKtoName1, b.PersKtoZusInfo1,b.PersKtoPreisGruppe
)
order by total desc;

Delphi.Narium 1. Apr 2023 14:43

AW: Access SQL performance
 
SQL-Code:
select
  top 30
  ABFStatKundenNr,
  PersKtoName1,PersKtoZusInfo1,PersKtoPreisGruppe, -- müssen auch mit ins äußere Select
  total
from
(
  select
    a.ABFStatKundenNr,
    sum(a.ABFStatUmsatz) as total,
    b.PersKtoName1,b.PersKtoZusInfo1,b.PersKtoPreisGruppe -- Änderung Felder sollen mit angezeigt werden
  from
    ABFStat a,
    sPersKto b
  where b.PersKtoNummer = a.ABFStatKundenNr
  and b.PersKtoArt = 68
  -- and a.ABFStatDatum > #01/01/2022# and a.ABFStatDatum < #31/12/2022#
  and a.ABFStatDatum between #01/01/2022# and #31/12/2022#
  group by a.ABFStatKundenNr
)
order by total desc;

dummzeuch 1. Apr 2023 14:50

AW: Access SQL performance
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1520536)
Ich arbeite eigentlich nicht mit Access, aber vielleicht geht dies ja besser:
SQL-Code:
Select Top 30
a.ABFStatKundenNr,
sum(a.ABFStatUmsatz) as total
from ABFStat as a
JOIN sPersKto as b ON
  (b.PersKtoNummer = a.ABFStatKundenNr) and
  (b.PersKtoArt = 68)
WHERE a.ABFStatDatum > #01/01/2023#
group by a.ABFStatKundenNr
order by sum(a.ABFStatUmsatz) desc

Ich meine mich dunkel zu erinnern, dass man das bei MS Access ohne "as" formuliert:

"from ABFStat a"

Ich kann es aber auch gerade nicht ausprobieren, ich habe privat kein MS Office und es ist auch schon lange her, dass ich was damit gemacht hhabe.

Uwe Raabe 1. Apr 2023 16:30

AW: Access SQL performance
 
Zitat:

Zitat von dummzeuch (Beitrag 1520570)
Ich meine mich dunkel zu erinnern, dass man das bei MS Access ohne "as" formuliert:

Das war ja mein erster Ansatz: https://www.delphipraxis.net/1520524-post5.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz