ADS tunen.

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

ADS tunen.

Beitrag von Manfred »

Hi,
wie ich bei einer anderen Aktion festellen mußte, kann ein veränderter Indexschlüssel enorme Geschwindigkeitszuwächse bringen. Das hat mich natürlich nachdenklich gemacht. Wie kann man denn beim ADS prüfen, oder testen, ob ein Indexschlüssel optimal ist, oder ob er verbessert werden kann?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS tunen.

Beitrag von Marcus Herz »

- SQL kann kein Index, in welchem Felder mit + verknüpft sind.
- Bei ADT gibt es die Rawkey Inices, verknüpft mit ;
- man kann im ARC ein SQL analaysieren und den Ausführungsweg anzeigen lassen
- Bei DBF wahrscheinlich je Feld, das als Referenz gebraucht wird, eineen Index anlegen
- ich habe irgendwann mich drauf festgelegt, Index Schlüssel nur für die Referenzierung anzulegen, nicht mehr für Anzeige Sortierung.
- Ansonst : ausprobieren
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: ADS tunen.

Beitrag von Manfred »

verstehe ich jetzt nicht. Ich habe den neuen Index mit + erweitert und danach ging es ab wie Schmitz Katze
index.PNG
index.PNG (55.04 KiB) 2805 mal betrachtet
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS tunen.

Beitrag von UliTs »

Manfred hat geschrieben: So, 01. Nov 2020 18:56 verstehe ich jetzt nicht. Ich habe den neuen Index mit + erweitert und danach ging es ab wie Schmitz Katze
Vermutlich kann der ADS dann doch auch mit "+" im Index klar kommen.
Du kannst aber auch alternativ als Test mal einzelne Indizes für die Felder KfzNr,Tankdatum,Tankzeit anlegen und prüfen, ob das auch schnell ist.

Prüfen kann man so etwas recht gut im Data Architekten (ARC). Da machst Du das SQL-Fenster auf, gibt z.B.

Code: Alles auswählen

select * from tankbuch
order by tankzeit
ein und rufst mit "Rechte Maustaste/show Plan" den Ausführungsplan auf. Das zeigt Dir an, ob der ADS das Statement vernünftig optimieren kann.

Da kann man sich übrigens bei aufwändigen SQL-Statements Tage mit beschäftigen 8) .
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS tunen.

Beitrag von nightcrawler »

Bei DBF geht ein Index mit '+', bei ADT nicht mehr. Der ADS beginnt von vorne und sucht die Felder solange es noch passt, zB o.a. Index auf

Code: Alles auswählen

str(kfznr,9,0)+dtos(tankdatum)+tankzeit
wird für die Optimierung folgender SQL sehr wohl verwendet:

Code: Alles auswählen

select * from tankbuch where kfznr=5;
select * from tankbuch where kfznr=5 and tankdatum='2020-10-30';
select * from tankbuch where tankdatum='2020-10-30' and kfznr=5;
select * from tankbuch where kfznr=5 and tankdatum='2020-10-30' and tankzeit='12:00';
nicht verwendet wird der Index, wenn die Felder von vorne her nicht passen (kfznr fehlt inder Abfrage):

Code: Alles auswählen

select * from tankbuch where tankdatum='2020-10-30';
select * from tankbuch where tankdatum='2020-10-30' and tankzeit='12:00';
select * from tankbuch where tankzeit='12:00';
Zum Teil verwendet, wenn dazwischen das Feld fehlt (Optimierung nur auf kfznr):

Code: Alles auswählen

select * from tankbuch where kfznr=5 and tankzeit='12:00';
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: ADS tunen.

Beitrag von Tom »

Hat das wirklich was mit dem ADS zu tun? Binärbaumindexe sind einfach schneller, wenn die Ausprägungen eindeutiger werden. Wenn ich eine Tabelle z.B. mit Log-Einträgen zu Kunden habe, und zu jedem Kunden laufen täglich Dutzende solcher Log-Einträge auf, und ich indexe nur mit der Kundennummer, plätte ich den Binärbaum jeden Tag ein bisschen mehr - die Suche muss langsam sein, weil ich eine große Menge gleicher Treffer habe, die repräsentiert sein wollen. Wenn ich das Datum hinzunehme, verringere ich diese Menge deutlich und gebe dem Baum mehr Stabilität. Das Optimum würde ich in diesem Fall erreichen, wenn ich aus dem Datum eine Timestamp bis runter zum Sekundenwert machen würde. Dann hätte ich nur ein-eindeutige Einträge, nehme ich an, und damit die optimale Situation für diese Art von Repräsentation. Oder liege ich jetzt völlig falsch? <grübel>
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ADS tunen.

Beitrag von Martin Altmann »

Moin Tom,
Tom hat geschrieben: Mo, 02. Nov 2020 9:37 Oder liege ich jetzt völlig falsch? <grübel>
nein, Du liegst nicht unbedingt falsch.
Außer, dass breite Bäume auch nicht unbedingt optimal sind. Du willst ja eigentlich mit möglichst wenigen Schritten zum Ziel kommen :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten