AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Komisches SQL Sortier-Verhalten
Thema durchsuchen
Ansicht
Themen-Optionen

Komisches SQL Sortier-Verhalten

Ein Thema von HCB · begonnen am 5. Jun 2024 · letzter Beitrag vom 6. Jun 2024
Antwort Antwort
HCB

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

Komisches SQL Sortier-Verhalten

  Alt 5. Jun 2024, 14:08
Datenbank: Access • Version: 2003 • Zugriff über: FireDac
Hallo, ich habe gerade was kurioses festgestellt. Mit dieser SQL Abfrage dauert das Ergebnis ca. 8 sek.:
Delphi-Quellcode:
select BestDocErfNr, BestDocDatum, BestDocLSNr, BestDocID
from BestDok
where BestDocType = 0 and BestDocLiefNr = 'K000100' order by BestDocDatum desc;
Das ist ja eine 08/15 Standard Query. Ja, ist indiziert.

Seltsamerweise läuft diese Abfrage ratz fatz:
Delphi-Quellcode:
select BestDocErfNr, BestDocDatum, BestDocLSNr, BestDocID
from BestDok
where BestDocType = 0 and BestDocLiefNr = 'K000100
group by BestDocDatum,BestDocErfNr,BestDocLSNr, BestDocID
order by BestDocDatum desc ;
Jetzt frage ich mich natürlich woran das liegen könnte. Außerhalb Delphi mit einem externen Programm (MSA Query von MiTec) laufen beide Abfragen im ms Bereich.
Hat jemand eine Idee oder weiß, wo der Hund begraben liegt?

LG Harry
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
328 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komisches SQL Sortier-Verhalten

  Alt 5. Jun 2024, 14:21
Hi

Ohne den Index Aufbau zu kennen, wird es wahrscheinlich schwierig eine Aussage zu treffen.
Ein Group By führt ja immer automatisch dazu, dass deine Datenmenge auch erst mal nach diesen Werten Sortiert wird.
Kann es sein, dass dein Index nicht über das eigentliche Sortierfeld geht, sondern nur über die anderen Felder im Group By und deshalb bei der 2. Abfrage deine Datenmenge die noch sortiert werden muss kleiner ist?
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
214 Beiträge
 
Delphi 12 Athens
 
#3

AW: Komisches SQL Sortier-Verhalten

  Alt 5. Jun 2024, 14:48
Das mit dem Index ist so eine Sache, die ich glaube noch nicht richtig geschnallt habe.

In der .mdb Access Datei ist u.a. die Tabelle BestDok. Da sind 7 Index für die Tabelle hinterlegt. Keiner davon hat das Feld BestDocDatum inkludiert.

Im Delphi Datenmodul liegt die FDQuery die die Abfrage ausführt. In dieser ist der IndexFieldName 'BestDocDatum' als Feld eingeschlossen.
Wenn hier von "Index auf..." die Rede ist, ist dann der Index der in Access angelegt ist oder der Index im FDQuery gemeint?

LG Harry
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#4

AW: Komisches SQL Sortier-Verhalten

  Alt 5. Jun 2024, 15:05
Der Index wird auf der Datenbank abgelegt, das hat nichts mit der Query zu tun.

Was mich wundert ist dass Access an sich - wenn Du extern darauf zugreifst - schnell ist.
Kann es sein, dass erst die komplette Datenmenge an den Client (also das Programm) übertragen wird, dann dort im Speicher sortiert und erst dann ausgefiltert wird?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#5

AW: Komisches SQL Sortier-Verhalten

  Alt 5. Jun 2024, 15:18
Genau das ist der Fall, wenn in IndexFieldName etwas steht, für das es auf der Datenbank keinen Index gibt. Dann muss der Client die Sortierung vornehmen und das geht bei wenigen Datensätze (group by) halt schneller als bei vielen Datensätzen.

Wobei mir ein Order By im SQL und eine zusätzliche Angabe von Spalten in IndexFieldName nicht wirklich sinnvoll erscheint. Zuerst sortiert die Datenbank entsprechend dem Order By und anschließend sortiert der Client das Ergebnis entsprechend IndexFieldName. Sprich: Man sortiert dann ein sortiertes Ergebnis. Und sind dann noch beide Sortierungen gleich, ist's einfach nur Resourcen- bzw. Zeitverschwendung.

Meiner Meinung nach sollte man die Sortierarbeit immer die Datenbank machen lassen, dafür ist sie da und das kann sie vermutlich deutlich besser als der Client.

IndexFieldName nutze ich nur bei 'ner Memorytable, wenn die nicht selbst die Möglichkeit der Indexerstellung mitliefert. Kann sie selbst 'nen Index (oder mehrere) anlegen, nutze ich immer IndexName.
  Mit Zitat antworten Zitat
HCB

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

AW: Komisches SQL Sortier-Verhalten

  Alt 5. Jun 2024, 15:53
Die Frage ist:
Muss ich denn überhaupt bei der FDQuery etwas bei Indexes außer IndexesActive=true eintragen, wenn doch schon in der Datenbank die Index angelegt sind?
Denn unter IndexName kann ich nichts auswählen. Müssten da nicht die Indices der Access-Tabelle stehen?
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:25 Uhr.
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