AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Access SQL performance

Ein Thema von HCB · begonnen am 31. Mär 2023 · letzter Beitrag vom 1. Apr 2023
Antwort Antwort
Seite 1 von 2  1 2      
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#1

Access SQL performance

  Alt 31. Mär 2023, 12:21
Datenbank: Access • Version: 2003 • Zugriff über: FireDac
Hallo, vielleicht kann und will mir jemand helfen:
Folgendes SQL script habe ich laufen (Delphi mit FireDac Access) und funktioniert einwandfrei.

Select Top 30 * from
(SELECT ABFStatKundenNr, sum(ABFStatUmsatz) as total from ABFStat WHERE ABFStatDatum > #01/01/2023#
and ABFStatKundenNr IN
(SELECT PersKtoNummer FROM sPersKto WHERE PersKtoArt = 68 )
group by ABFStatKundenNr)
order by total desc;

Hier werden die Top30 Kunden mit Kundennummer und Umsatz gelistet.
Problem: Es dauert 10 sek. bis das Ergebnis ausgewertet ist.
Frage: Könnte man das sql umschreiben damit es schneller ist? Ich habe schon einiges probiert, komme aber nicht weiter.

Für Hilfe und Unterstützung würde ich mich sehr freuen.

LG Harry
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
76 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Access SQL performance

  Alt 31. Mär 2023, 12:28
Verwende mal EXISTS wie folgt:

Select Top 30 * from
(SELECT ABFStatKundenNr, sum(ABFStatUmsatz) as total from ABFStat WHERE ABFStatDatum > #01/01/2023#
and EXISTS (SELECT NULL FROM sPersKto WHERE sPersKto.PersKtoNummer = ABFStat.ABFStatKundenNr AND PersKtoArt = 68 )
group by ABFStatKundenNr)
order by total desc;
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#3

AW: Access SQL performance

  Alt 31. Mär 2023, 12:32
Hallo, vielleicht kann und will mir jemand helfen:
Folgendes SQL script habe ich laufen (Delphi mit FireDac Access) und funktioniert einwandfrei.

Select Top 30 * from
(SELECT ABFStatKundenNr, sum(ABFStatUmsatz) as total from ABFStat WHERE ABFStatDatum > #01/01/2023#
and ABFStatKundenNr IN
(SELECT PersKtoNummer FROM sPersKto WHERE PersKtoArt = 68 )
group by ABFStatKundenNr)
order by total desc;

Hier werden die Top30 Kunden mit Kundennummer und Umsatz gelistet.
Problem: Es dauert 10 sek. bis das Ergebnis ausgewertet ist.
Frage: Könnte man das sql umschreiben damit es schneller ist? Ich habe schon einiges probiert, komme aber nicht weiter.
Naja, die Query engine muss halt den kompletten Ergebnissatz zusammensammeln und sortieren, bevor es die ersten 30 identifizieren und zurückliefern kann. Da kann man nur versuchen, die Subqueries zu beschleunigen. Hat ABFStat einen Index auf ABFStatDatum, hat sPersKto einen auf PersKtoArt? Hast Du versucht die IN-Query durch einen JOIN zu ersetzen?
Peter Below
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#4

AW: Access SQL performance

  Alt 31. Mär 2023, 13:00
Mit EXIST nimmt es sich nichts, gleiche 10 sek. Wartezeit.
ABFStat und sPersKto haben keinen Index, mit Inner join bekomme ich Fehlermeldung (bzw. hab ich wahrscheinlich was falsch gemacht).
Auch eine Reduzierung auf 20 bringt keinen Performancevorteil, was ja klar ist, es muss die gesamte Datenbank durchsucht werden.

LH Harry
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: Access SQL performance

  Alt 31. Mär 2023, 14:01
Ohne das jetzt gerade mit Access probieren zu können:
SQL-Code:
Select Top 30
a.ABFStatKundenNr,
sum(a.ABFStatUmsatz) as total
from ABFStat a
JOIN sPersKto b ON
  (b.PersKtoNummer = a.ABFStatKundenNr) and
  (b.PersKtoArt = 68)
WHERE a.ABFStatDatum > #01/01/2023#
group by a.ABFStatKundenNr
order by total desc
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#6

AW: Access SQL performance

  Alt 31. Mär 2023, 15:56
Hallo Uwe,

Danke, dein sql code mit join bringt ebenfalls die Fehlermeldung 'Syntaxfehler in FROM-Klausel'.
Normal sieht das in Ordnung aus, ich kann nicht erkennen woran es liegen könnte.

LG Harry
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: Access SQL performance

  Alt 31. Mär 2023, 16:27
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
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#8

AW: Access SQL performance

  Alt 31. Mär 2023, 16:51
Danke Uwe,

verflixt es kommt der gleiche Fehler 'Syntaxfehler in FROM-Klausel'.
Kann in der FROM Klausel haber nicht erkennen was daran falsch sein sollte. Vielleicht ist auch die Fehlermeldung nur pauschal und hat gar nichts mit der FROM Klausel zu tun?

LG Harry
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: Access SQL performance

  Alt 31. Mär 2023, 17:28
Kannst du die DB zur Verfügung stellen? Geht auch mit abgespeckten Testdaten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#10

AW: Access SQL performance

  Alt 31. Mär 2023, 17:47
Ich habe leider keine neutrale DB zur Verfügung. In der Originalen sind ca. 70.000 Einträge in der ABFStat und ca. 18.000 in der sPersKto.
Da sich aber in der sPersKto die Kunden befinden, müsste ich alle datengeschützten Daten erst aus der Tabelle löschen und in der ABFStat ebenfalls. Das ist etwas aufwendig.
Ich hoffe, du hast Verständnis dafür. Aber vielen Dank, das du dich dafür einbringen willst.

LG Harry
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz